【问题标题】:How to sum distinct rows in a pandas Dataframe如何对熊猫数据框中的不同行求和
【发布时间】:2019-10-06 18:30:37
【问题描述】:

我正在尝试添加一个新列,其中包含另一列的值的总和,但仅适用于不同的行。 假设我们有这个数据框:

    col1     col2   vote
0     a        2     5
1     a        2     5
2     b        2     2
3     c        4     1
4     d        3     5
5     d        3     5
6     d        3     5

我想按 col2 分组,然后将不同对 col1 和 col 2 的所有投票相加(每对 col1 和 col2 的投票始终相同。

我正在尝试获得这个结果:

    col1     col2   vote   aggrVote
0     a        2     5        7
1     a        2     5        7
2     b        2     2        7
3     c        4     1        1
4     d        3     5        5
5     d        3     5        5
6     d        3     5        5

col2 的值 3 只有一个不同的 col1 的值,所以投票只有 5。col2 的值 2 有 3 个不同的 col1 的值 (a,b),所以总和是 5 + 2

【问题讨论】:

  • 输入数据框的 col2 数据错误,其中 col1 为 c,应为 4 而不是 2

标签: python pandas pandas-groupby


【解决方案1】:

IIUC,你需要:

s = df.drop_duplicates(['col1','col2']).groupby('col2')['vote'].sum() #thanks @jez
df['aggrVote']=df.col2.map(s)
print(df)

  col1  col2  vote  aggrVote
0    a     2     5         7
1    a     2     5         7
2    b     2     2         7
3    c     4     1         1
4    d     3     5         5
5    d     3     5         5
6    d     3     5         5

【讨论】:

  • s = df.drop_duplicates(['col1','col2']).groupby('col2')['vote'].sum()
  • 对于 col1 和 col2 我应该输入列名吗?谢谢
  • @natsumiyu 是的,如果你的列名有空格,那么不要使用点符号。将df.col2.map 替换为df['col2'].map
【解决方案2】:

这应该在一行中完成:

df
#  col1  col2  vote
#0    a     2     5
#1    a     2     5
#2    b     2     2
#3    c     4     1
#4    d     3     5
#5    d     3     5
#6    d     3     5

df['aggrVote'] = df.groupby(['col2'])['vote'].transform(lambda x: x.unique().sum())

df
#  col1  col2  vote  aggrVote
#0    a     2     5         7
#1    a     2     5         7
#2    b     2     2         7
#3    c     4     1         1
#4    d     3     5         5
#5    d     3     5         5
#6    d     3     5         5

【讨论】:

  • @anky_91 选项非常快。 zipa 发布的多合一解决方案还可以,但速度较慢。感谢两者:)
猜你喜欢
  • 2016-11-23
  • 1970-01-01
  • 2017-01-19
  • 2019-03-12
  • 1970-01-01
  • 2023-04-03
  • 2020-01-06
  • 1970-01-01
  • 2021-05-30
相关资源
最近更新 更多