2017-01-31 54 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