【发布时间】:2020-09-09 17:38:44
【问题描述】:
我确信有一种使用 pandas 的好方法可以做到这一点,但我一直在绕圈子。
我想对具有相同 ID 号的列中的值求和。
例子df:
ID_number Billed Paid Balance
A100 300 20 280
A100 1000 1000 0
B9B6 1200 0 1200
B9B6 200 40 160
我在输出中寻找什么:
ID_number Billed Paid Balance
A100 1300 1020 280
B9B6 1400 40 1360
给我带来麻烦的警告是身份证号码包含字母和数字。
我尝试将数据框一分为二,并将 Billed、Paid 和 Balance 列更改为 int 值,以便它们可以相加,但我需要按索引号对它们进行分组以便将它们加在一起。无论我如何对数据帧进行切片和切块,当我再次将它们连接在一起时,它会返回为“对象”类型,并且我的对象编号会像字符串一样被粉碎在一起,而不是像 int 值那样相加。
我也尝试更改单个列的数据类型,但我无法让它工作,因为一些数字在十进制方面相当长,我收到了这个错误:ValueError: invalid literal for int() with base 10:
我一直在尝试使用 df.groupby(['ID_number'].agg('sum') 函数进行聚合。
有谁知道如何做到这一点?
【问题讨论】:
-
df.groupby('ID_number').sum()?
-
@BEN_YO 当我使用它时,行输出最终为“A100 3001000 201000 2800”,就好像对象被连接而不是被求和一样。
-
您的列类型是字符串,将它们转换为数字,@BEN_YO 解决方案将起作用。
-
@Erfan 当我使用 df['ID_number'] = df['ID_number'].astype(int) 将列类型更改为字符串时,我收到以下错误: ValueError: invalid literal for int( ) 以 10 为底:'7.140000000000001'
-
请提供minimal reproducible example,以及整个错误输出。
标签: python pandas dataframe aggregate concat