Суммирование двух столбцов объекта в пандах - PullRequest
0 голосов
/ 10 июля 2019

Проблема с объединением двух одинаковых столбцов, имеющих объект dtype.Поскольку два столбца одинаковы, они никогда не имеют значений в одной строке.Все в столбцах целые числа, но есть некоторые значения nan и «$ 0», которые, похоже, не обходят все решения, которые я пробовал.Данные выглядят так:

Actual    MTD Actual 
nan       3
nan       $0  
nan       nan
3         nan
2         nan
1         nan

Я попытался изменить столбцы на строковый тип, а затем на целочисленный тип.Я также пытался заполнить значения nan с 0, но это не похоже на

То, что я пробовал:
1. df[["Actual", "MTD Actual"]].sum(axis=1)
2. df['Actual'].add(df['MTD Actual'], fill_value=0)
3.pd.to_numeric(df['MTD Actual'])

Соответствующие сообщения об ошибках:
1. Суммирует, но весь столбец равен NaN
2. Возвращает "неподдерживаемые типы операндов для +: 'int' и 'str'"
3. Невозможно проанализировать строку "$ 0" в позиции 3266

Я хотел бы, чтобы вывод был:

Actual     
3      
0         
nan       
3         
2         
1         

1 Ответ

0 голосов
/ 10 июля 2019

У вас есть две разные проблемы. Во-первых, вы хотите преобразовать ваши нечисловые столбцы в числовые значения. Во-вторых, вы хотите суммировать по столбцам, сохраняя значения nan, где все строки равны nan, но обрабатывая их как 0 в противном случае.

Вот решение, которое должно работать:

df.loc[df.any(axis=1)] = df.replace('[\$,]', '', regex=True).astype(float).fillna(0)
df = df.sum(axis=1)

Регулярное выражение удаляет знаки доллара и запятые. .astype(float) преобразует данные в числовые, а .fillna(0) заменяет nan с. df.loc[df.any(axis=1)] означает, что мы меняем только значения строк, в которых есть хотя бы одно не nan значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...