在熊猫中,如何减少行数,以便仅接受某个子组的最大值的行?

时间:2018-11-18 17:16:31

标签: python pandas

a  1
a  2
a  3
b  3
b  4
a  3
b  5
b  6
b  4
b  10
b  11
a  10
b  2
b  3

忽略a直到b发生变化。仅考虑将b更改为a的组,并获得该组的最大值?

最终输出

    a  1
    a  2
    a  3
    b  4
    b  11
    a  10

即 b是第一组的最大值 b是第二组的最大值 a是第三组的最大值

1 个答案:

答案 0 :(得分:1)

使用shiftcumsumeq创建组密钥,然后使用groupby sort_values + tail

m=(df.C1.shift().ne(df.C1)&df.C1.eq('a')).cumsum()
df.sort_values('C2').groupby(m).tail(1)
Out[62]: 
   C1  C2
4   b   4
11  a  10
10  b  11

然后我们使用concat

将第一组的所有C1值合并为'a'
s1=df.sort_values('C2').groupby(m).tail(1)
s2=df.loc[(df.C1=='a')&(m==1)]
pd.concat([s1,s2]).sort_index()
Out[71]: 
   C1  C2
0   a   1
1   a   2
2   a   3
4   b   4
10  b  11
11  a  10