【问题标题】:pandas - merge and sum nearly duplicate rowspandas - 合并和总结几乎重复的行
【发布时间】:2021-08-25 08:52:55
【问题描述】:

我有一个 pandas 数据框,其中有几行几乎是重复的,除了一个值。我的目标是合并这些行并对不同的值求和。

这是一个例子:

names   count   subject
A       2       physics
A       3       physics
A       3       chemistry
B       2       literature
B       3       literature
B       1       economics
C       3       physics
C       2       chemistry

这就是我想要的:

names   count   subject
A       5       physics
A       3       chemistry
B       5       literature
B       1       economics
C       3       physics
C       2       chemistry

我尝试使用 groupby(),这就是我得到的:

df2 = df.groupby(["names","subject"]).agg({"count":"sum"})
names subject       count
A     chemistry       3
      physics         5
B     economics       1
      literature      5
C     chemistry       2
      physics         3

解决此问题的最佳方法是什么?我研究了 groupby() 函数,但我仍然不太了解。

【问题讨论】:

  • 在 groupby 参数中添加 as_index=False

标签: python pandas


【解决方案1】:

您可以添加sort=Falseas_index=False 以避免MultiIndexsum 的聚合中:

df2 = df.groupby(["names","subject"], sort=False, as_index=False).agg({"count":"sum"})
print (df2)
  names     subject  count
0     A     physics      5
1     A   chemistry      3
2     B  literature      5
3     B   economics      1
4     C     physics      3
5     C   chemistry      2

如果需要更改顺序传递列名列表:

df2 = df2[['names','count','subject']]
print (df2)
  names  count     subject
0     A      5     physics
1     A      3   chemistry
2     B      5  literature
3     B      1   economics
4     C      3     physics
5     C      2   chemistry

也可以传递原始列名(如果列传递给groupbygroupby 之后):

df2 = (df.groupby(["names","subject"], sort=False, as_index=False)["count"]
         .sum()
         .reindex(df.columns, axis=1))
print (df2)
  names  count     subject
0     A      5     physics
1     A      3   chemistry
2     B      5  literature
3     B      1   economics
4     C      3     physics
5     C      2   chemistry

【讨论】:

【解决方案2】:

只需指定 as_index=False:

df.groupby(["names","subject"], as_index=False).sum()

【讨论】:

    猜你喜欢
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2018-11-05
    相关资源
    最近更新 更多