【问题标题】:Sum certain values between rows对行之间的某些值求和
【发布时间】:2018-06-22 22:43:56
【问题描述】:

我有一个 370000 行 x 340 列的数据框,在这个 DataFrame 中,我在列之间混合了数字和非数字值。

我想合并行,基于user_id,将某些数值相加,并保留非数值。

给定表:

user_id          points    gender    age
11111              10000      male    18
 2222               4200    female    33
11111              30000      male    18
 2222                 10    female    33
11111              20000      male    18

我希望得到这样的结果:

user_id          points    gender     age
11111              60000      male     18
2222                4210      female   33

在对行求和时,我需要对大约求和。 340 个值中有 300 个值,但我是熊猫新手,正在努力寻找正确的方法,不胜感激。

【问题讨论】:

  • 我不认为这是数字与非数字——年龄是数字,但你不想对年龄求和,对吧?
  • @DSM 是的,我只想合并某些数值
  • 你可以做一个groupby,然后为每一列选择聚合函数。在这种情况下,类似于df.groupby('user_id').agg({'points':'sum', 'gender': 'first'})

标签: python pandas


【解决方案1】:

您想将您的原始DataFrame'user_id' 分组。然后,您可以聚合分组的框架并指定要在每列上使用哪个函数的字典。

df.groupby('user_id').agg({'points': 'sum', 
                           'gender': 'first', 
                           'age': 'first'}).reset_index()

输出:

   user_id  points  gender  age
0     2222    4210  female   33
1    11111   60000    male   18

只要您想要“保留”该值的列中只有一个唯一值,First 就会起作用。否则,实现模式以保留最常见的值,或者实现“唯一”以获取所有值的列表。

【讨论】:

    【解决方案2】:

    嘿,你可以使用 pandas aggregate sum 来做到这一点

    喜欢

    df.groupby(['user_id'])[["points"]].sum()
    
    df.groupby(['user_id'])[["list_of_attribute"]].sum()
    

    也可以在list_of_attributes中传递多个columns 但这将不得不subset 的列,否则KeyError

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      • 2016-10-06
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多