【问题标题】:Summing columns with same string ID in a pandas dataframe在熊猫数据框中对具有相同字符串 ID 的列求和
【发布时间】: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


【解决方案1】:

给你:

df.groupby('ID_number').sum()

【讨论】:

  • @BEN_YO 在上面提出了这个建议,但是每当我这样做时,行输出都会以 'A100 3001000 201000 2800' 结束,就好像对象被连接而不是被求和一样。
  • 这不应该发生。请在分组前发布这些行
  • 虽然只有代码的答案可能会回答这个问题,但您可以通过为您的代码提供上下文、此代码工作的原因以及一些文档参考以供进一步阅读,从而显着提高您的答案质量.
【解决方案2】:
 df.groupby(['ID_number']).sum()

【讨论】:

  • 虽然只有代码的答案可能会回答这个问题,但您可以通过为您的代码提供上下文、此代码工作的原因以及一些文档参考以供进一步阅读,从而显着提高您的答案质量.
【解决方案3】:

编辑:现在我发现你没有索引列,试试这个:

index_list = pd.Index.tolist(df.ID_number)

试试这个:

index_list = pd.Index.tolist(df.index)
df.groupby(index_list).sum()

它将索引列转换为列表,然后在 groupby 函数中使用它。 希望这能解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多