【问题标题】:Python: Sum multiple columns in a Data Frame by each unique row entry in another columnPython:通过另一列中的每个唯一行条目对数据框中的多列求和
【发布时间】:2018-02-24 13:23:56
【问题描述】:

如何通过使用另一列(例如 C2 列)中的每个唯一条目来对多列(例如 C4、C5 和 C6 列)求和。

例如,我想创建一个新的数据框,该数据框将通过导入和导出折叠列 C2,并显示 C4、C5 和 C6 的总和(最好删除其他列 C1 和 C3)。

Sample Table

【问题讨论】:

  • 请提供您尝试过的示例代码
  • 我已经简化了问题,因为我的实际数据集太大但是如果 xdata 是我的数据框,我使用 ydata = xdata.sum(axis=0) 来获取每一列的总和然后基本上使用 ydata[C4:] 来隔离总计,但显然没有保留按 C1、C2 或 C3 列中的特定行条目求和的能力

标签: python dataframe sum


【解决方案1】:

您可以使用 pandas groupby 函数来做到这一点

df = pd.DataFrame([['A', 'Import', 'Argentina', 1, 1, 1],
                   ['B', 'Import', 'Brazil', 2, 2, 2],
                   ['C', 'Export', 'UJ', 3, 3, 3],
                   ['D', 'Export', 'US', 4, 4, 4],
                   ['A', 'Export', 'Canada', 5, 5, 5],
                   ['B', 'Export', 'Russia', 6, 6, 6],
                   ['C', 'Import', 'China', 7, 7, 7],
                   ['D', 'Import', 'India', 8, 8, 8]], 
                  columns=['C1', 'C2', 'C3', 'C4', 'C5', 'C6'])

results = df.groupby("C2").sum()

print(results)

哪个会给你

        C4  C5  C6
C2                
Export  18  18  18
Import  18  18  18

【讨论】:

  • 谢谢,这非常有帮助,正是我所缺少的。除了创建一个新的数据框之外,有没有更好的方法来忽略前面不需要的列:results[C4:]
  • @KSQ pandas 倾向于在进行更改时通过创建数据帧的新副本来工作,某些函数具有inplace 选项以不创建新副本。例如,要删除来的列,您可以执行 df.drop(['C1', 'C2', C3'], axis=1, inplace=True),这将只返回最后几列而不创建副本。
猜你喜欢
  • 2012-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 2022-12-06
  • 1970-01-01
相关资源
最近更新 更多