熊猫groupby不返回预期的输出

时间:2019-10-01 19:50:02

标签: python pandas dataframe

我有一个将pd.groupby().agg('sum')应用于不同的pandas.DataFrame对象的程序。这些数据帧都具有相同的格式。该代码适用于除此数据帧(图片:df1)之外的所有数据帧,该数据帧会产生有趣的结果(图片:result1)。

我尝试过:

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

此代码适用于df2,但不适用于df1

df1

result1

该代码对于其他数据帧(图片:df2,result2)也能正常工作

df2 result2

有人可以告诉我为什么df1会这样吗?

2 个答案:

答案 0 :(得分:1)

第一个数据帧中的问题是应为数字的变量中的逗号,我认为python无法将列识别为数字。您是否尝试过替换逗号?

答案 1 :(得分:0)

似乎在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