2017-01-31 121 views
1
优先提取

现在我想处理数据帧如何组和处理在大熊猫

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

可以GROUPBY列一个以及有关str.contains("A")每组使用idxmax(),那么如果有一个B列中,它将获得包含字母一个第一个索引,否则就回到第一行因为所有值都

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它接受INT埃格作为职位索引:

df.groupby("A", as_index=False).apply(lambda g: g.iloc[g.B.str.contains("A").values.argmax()]) 

# A B 
#0 1 A0 
#1 2 B1 
#2 3 A2