我有一个数据框(df)
a b c
1 2 20
1 2 15
2 4 30
3 2 20
3 2 15
并且我只想识别c列中的最大值
我尝试了
a = df.loc[df.groupby('b')['c'].idxmax()]
但分组依据删除了重复项,所以我得到了
a b c
1 2 20
2 4 30
它删除第3行,因为它们与第1行相同。
有什么办法编写代码以不删除重复项?
答案 0 :(得分:2)
在执行a
时也要考虑到列groupby
:
a = df.loc[df.groupby(['a', 'b'])['c'].idxmax()]
a b c
0 1 2 20
2 2 4 30
3 3 2 20
答案 1 :(得分:1)
我认为您需要:
df = df[df['c'] == df.groupby('b')['c'].transform('max')]
print (df)
a b c
0 1 2 20
2 2 4 30
3 3 2 20
更改数据中的差异:
print (df)
a b c
0 1 2 30
1 1 2 30
2 1 2 15
3 2 4 30
4 3 2 20
5 3 2 15
#only 1 max rows per groups a and b
a = df.loc[df.groupby(['a', 'b'])['c'].idxmax()]
print (a)
a b c
0 1 2 30
3 2 4 30
4 3 2 20
#all max rows per groups b
df1 = df[df['c'] == df.groupby('b')['c'].transform('max')]
print (df1)
a b c
0 1 2 30
1 1 2 30
3 2 4 30
#all max rows per groups a and b
df2 = df[df['c'] == df.groupby(['a', 'b'])['c'].transform('max')]
print (df2)
a b c
0 1 2 30
1 1 2 30
3 2 4 30
4 3 2 20