假设数据框如下:
id class count
0 A 2
0 B 2
0 C 2
0 D 1
1 A 3
1 B 3
1 E 2
2 D 4
2 F 2
对于每个id,我想找到计数最大的类。如果多个类具有相同的计数,则将它们合并为一行。对于上面的例子,结果应该是这样的:
id class count
0 A,B,C 2
1 A,B 3
2 D 4
如何在pandas中使用语句来实现这个功能?
最佳答案
df = df[g['count'].transform('max').eq(df['count'])]
print (df)
id class count
0 0 A 2
1 0 B 2
2 0 C 2
4 1 A 3
5 1 B 3
7 2 D 4
df = df.groupby('id').agg({'class':','.join, 'count':'first'}).reset_index()
print (df)
id class count
0 0 A,B,C 2
1 1 A,B 3
2 2 D 4
另一种具有自定义功能的解决方案:
def f(x):
x = x[x['count'] == x['count'].max()]
return (pd.Series([','.join(x['class'].values.tolist()), x['count'].iat[0]],
index=['class','count']))
df = df.groupby('id').apply(f).reset_index()
print (df)
id class count
0 0 A,B,C 2
1 1 A,B 3
2 2 D 4
关于python - 如何在特定条件下从 Pandas 数据框中选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43489261/