Pandas GroupBy 求和连接数字而不是求和
Pandas GroupBy sum concatenates numbers instead of summing them
当我使用以下代码时:
print(self.df.groupby(by=[2])[3].agg(['sum']))
在以下数据框上:
0 1 2 3 4 5 6 7
0 15 LCU Test 1 308.02 170703 ALCU 4868 MS10
1 16 LCU Test 2 127.37 170703 ALCU 4868 MS10
求和函数未正确完成,因为值列(第 3 列)returns 是值的串联字符串 (308.02127.37),而不是维护各个值的完整性以允许操作。
您的第 3 列似乎是一个字符串。您是否使用 dtype=str
加载数据框?
此外,尽量不要对您的列进行硬编码。您可以使用 .astype
或 pd.to_numeric
进行投射,然后应用 sum
:
self.df.groupby(self.df.columns[2])[self.df.columns[3]].agg(
lambda x: pd.to_numeric(x, errors='coerce').sum()
)
或者
self.df.groupby(self.df.columns[2])[self.df.columns[3]].agg(
lambda x: x.astype(float).sum()
)
当我使用以下代码时:
print(self.df.groupby(by=[2])[3].agg(['sum']))
在以下数据框上:
0 1 2 3 4 5 6 7
0 15 LCU Test 1 308.02 170703 ALCU 4868 MS10
1 16 LCU Test 2 127.37 170703 ALCU 4868 MS10
求和函数未正确完成,因为值列(第 3 列)returns 是值的串联字符串 (308.02127.37),而不是维护各个值的完整性以允许操作。
您的第 3 列似乎是一个字符串。您是否使用 dtype=str
加载数据框?
此外,尽量不要对您的列进行硬编码。您可以使用 .astype
或 pd.to_numeric
进行投射,然后应用 sum
:
self.df.groupby(self.df.columns[2])[self.df.columns[3]].agg(
lambda x: pd.to_numeric(x, errors='coerce').sum()
)
或者
self.df.groupby(self.df.columns[2])[self.df.columns[3]].agg(
lambda x: x.astype(float).sum()
)