Pandas groupby не возвращает ожидаемый результат - PullRequest
0 голосов
/ 01 октября 2019

У меня есть программа, которая применяет pd.groupby().agg('sum') к группе различных pandas.DataFrame объектов. Эти кадры данных все в одном формате. Код работает на всех фреймах данных, за исключением этого фрейма данных (рисунок: df1), который дает забавный результат (рисунок: результат1).

Я пробовал:

df = df.groupby('Mapping')[list(df)].agg('sum')

Этот код работает для df2но не для df1.

df1

result1

Код отлично работает для других информационных фреймов(картинки: df2, result2)

df2 result2

Может кто-нибудь сказать мне, почему так получилось для df1?

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Проблема в первом кадре данных - запятые в переменных, которые должны быть числовыми, и я думаю, что python не распознает столбцы как числовые. Вы пытались заменить запятые?

0 голосов
/ 01 октября 2019

Похоже, что в df1 большинство столбцов numeric на самом деле str. Вы можете сказать запятыми (,), которые разделяют тысячи. Попробуйте:

df.iloc[:,1:] = df.iloc[:,1:].apply(lambda x: str(x).replace(",",""))
df.iloc[:,1:] = df.iloc[:,1:].apply(lambda x: pd.to_numeric(x))

В первой строке удаляются запятые из всех второго, третьего и т. Д. Столбцов. Вторая строка превращает их в числовые типы данных. На самом деле это может быть одна строка, но я написал это в две строки для удобства чтения.

Как только это будет сделано, вы можете попробовать свой код groupby.

Это хорошая практикапроверьте типы данных ваших столбцов, как только вы загрузите их. Вы можете сделать это с df1.dtypes.

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