我有一个pandas
DataFrame,如下所示。我想选择所有以“_cd”或“_ind”结尾的列,但“final_ind”列除外。我怎样才能做到这一点?
df = pd.DataFrame({
'var1': [20, 30.0, 40],
'var2_ind': ["a4", "a3", "b1"],
'var3_cd': [10, 5, 7],
'final_ind': [1, 0, 1],
})
这是我尝试过的:
df.ix[:, df.columns.str.contains('_cd|_ind')] #Gets all columns except var1
df.ix[:, df.columns.str.contains('_cd|_ind[^final_ind]')] #Gets only var3_cd
答案 0 :(得分:3)
您可以filter
使用regex
,如下所示:
df.filter(regex='^(?!final).*(_cd|_ind)$')
# var2_ind var3_cd
#0 a4 10
#1 a3 5
#2 b1 7
^(?!final)
会声明列名不要以final
开头,这要归功于否定的向前看 (?!...)
; .*(_cd|_ind)$
匹配以_cd
或_ind
; 答案 1 :(得分:2)
另一种不使用negative look ahead RegEx
的解决方案:
In [24]: df[df.columns[df.columns.str.contains('(?:_cd|_ind)$')].drop('final_ind')]
Out[24]:
var2_ind var3_cd
0 a4 10
1 a3 5
2 b1 7