熊猫分组删除重复项

时间:2018-11-23 09:16:43

标签: python pandas dataframe

我有一个数据框(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行相同。

有什么办法编写代码以不删除重复项?

2 个答案:

答案 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