我有一个将pd.groupby().agg('sum')
应用于不同的pandas.DataFrame
对象的程序。这些数据帧都具有相同的格式。该代码适用于除此数据帧(图片:df1)之外的所有数据帧,该数据帧会产生有趣的结果(图片:result1)。
我尝试过:
df = df.groupby('Mapping')[list(df)].agg('sum')
此代码适用于df2
,但不适用于df1
。
该代码对于其他数据帧(图片:df2,result2)也能正常工作
有人可以告诉我为什么df1会这样吗?
答案 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
。