我有相当大的数据框,有数百个功能(列),我喜欢使用列名称上的过滤方法访问它的一个子集:
X = df.filter(regex='d2v_*')
这很有效,但现在我正在尝试使用df
的转换来更改此X
特定子集的值,例如X - X.mean(axis=0)
。
我很想使用基于列名的掩码,但也许有更好的解决方案?
答案 0 :(得分:1)
你可以做类似的事情:
In [72]: df
Out[72]:
a b d2v_1 d2v_2 d2v_3 x
0 97 19 53 2 29 19
1 74 23 8 80 22 76
2 27 41 72 76 48 62
3 6 90 71 53 7 87
4 21 61 14 64 17 19
In [75]: cols = df.columns[df.columns.str.contains(r'^d2v_')]
In [76]: cols
Out[76]: Index(['d2v_1', 'd2v_2', 'd2v_3'], dtype='object')
In [77]: df.loc[:, cols] -= df.loc[:, cols].mean()
In [78]: df
Out[78]:
a b d2v_1 d2v_2 d2v_3 x
0 97 19 9.4 -53.0 4.4 19
1 74 23 -35.6 25.0 -2.6 76
2 27 41 28.4 21.0 23.4 62
3 6 90 27.4 -2.0 -17.6 87
4 21 61 -29.6 9.0 -7.6 19