如何在大熊猫中分组和处理优先级提取

时间:2017-01-31 02:39:05

标签: python pandas dataframe

现在我想处理数据框

df

A B
1 A0
1 A1
1 B0
2 B1
2 B2
3 B3
3 A2
3 A3

首先,我想按照df.A分组

sub1

A B
1 A0
1 A1
1 B0

其次,我想提取包含字母A

的第一行
A B
1 A0

如果没有A

sub2

A B
2 B1
2 B2

我想提取第一行

A B
2 B1

所以,我想得到下面的结果

A B
1 A0
2 B1
3 A2

我想处理优先级提取,我尝试分组,但无法弄清楚。如何处理?

1 个答案:

答案 0 :(得分:1)

您可以按列 A 进行分组,并且对于每个组,使用$out上的idxmax(),然后如果B列中有A,它将获得包含字母的第一个索引 A ,否则它会回退到第一行,因为所有值都是 False

str.contains("A")

如果您可能有重复索引,可以使用df.groupby("A", as_index=False).apply(lambda g: g.loc[g.B.str.contains("A").idxmax()]) # A B #0 1 A0 #1 2 B1 #2 3 A2 numpy.ndarray.argmax()接受整数作为位置索引:

iloc