我有一个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个价值高昂,但我不知如何努力做到这一点的熊猫爱好者,不胜感激。
答案 0 :(得分:3)
您要按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”将起作用。否则,实施模式以保留最常见的值,或者“唯一”以获取所有值的列表。
答案 1 :(得分:1)
嘿,您可以使用pandas aggregate sum
喜欢
df.groupby(['user_id'])[["points"]].sum()
df.groupby(['user_id'])[["list_of_attribute"]].sum()
还可以在columns
中传递多个list_of_attributes
但这必须在subset
列中,否则必须在KeyError
列中。