2017-08-01 64 views
1

選擇多個類似欄目我有一個數據幀:的Python:從數據幀

df: 

    a21 b21 c21 a22 b22 a23 b23 
1 2 2  2 4  5 7 7 
2 2 2  2 4  5 7 7 
3 2 2  2 4  5 7 7 
4 2 2  2 4  5 7 7 
5 2 2  2 4  5 7 7 

我只想選擇其中具有'21'列和'23'這樣,我的輸出是:

df_output: 

    a21 b21 c21 a23 b23 
1 2 2  2  7 7 
2 2 2  2  7 7 
3 2 2  2  7 7 
4 2 2  2  7 7 
5 2 2  2  7 7 

我可以做這與以下代碼:

df_21 = (df.loc[:, df.filter(like='21').columns])  
df_23 = (df.loc[:, df.filter(like='23').columns]) 

我可以然後合併df_21和​​,但是有沒有一種有效的方法可以在一行代碼中執行相同的操作?

回答

2

我們可以使用DataFrame.filter()方法:

In [38]: df.filter(regex=r'21|23') 
Out[38]: 
    a21 b21 c21 a23 b23 
1 2 2 2 7 7 
2 2 2 2 7 7 
3 2 2 2 7 7 
4 2 2 2 7 7 
5 2 2 2 7 7 

或:

In [45]: df.loc[:, df.columns.str.contains(r'21|23')] 
Out[45]: 
    a21 b21 c21 a23 b23 
1 2 2 2 7 7 
2 2 2 2 7 7 
3 2 2 2 7 7 
4 2 2 2 7 7 
5 2 2 2 7 7 
0

您可以使用條件列表理解:

targets = ['21', '23'] 
df[[col for col in df if any(target in col for target in targets)]]