就地适用于满足条件的熊猫数据框列

rhz*_*rhz 7 apply dataframe pandas

考虑以下熊猫数据框:

df = pd.DataFrame({'t': [1,2,3], 'x1': [4,5,6], 'x2': [7,8,9]} )

>>> print(df)
t  x1  x2
0  1   4   7
1  2   5   8
2  3   6   9
Run Code Online (Sandbox Code Playgroud)

我想对名称包含字符“x”的列应用一个函数(比如乘以 2)

这可以通过以下方式完成:

df.filter(regex='x').apply(lambda c: 2*c)
Run Code Online (Sandbox Code Playgroud)

但没有到位。我的解决办法是:

tmp = df.filter(regex='x')
tmp = tmp.apply(lambda c: 2*c)
tmp['t'] = df['t']
df = tmp
Run Code Online (Sandbox Code Playgroud)

这增加了更改列顺序的问题。有没有更好的办法?

Max*_*axU 3

IIUC 你可以这样做:

In [239]: df.apply(lambda x: x*2 if 'x' in x.name else x)
Out[239]:
   t  x1  x2
0  1   8  14
1  2  10  16
2  3  12  18
Run Code Online (Sandbox Code Playgroud)

更新:

In [258]: df.apply(lambda x: x*2 if 'x' in x.name else x) \
            .rename(columns=lambda x: 'ytext_{}_moretext'.format(x[-1]) if 'x' in x else x)
Out[258]:
   t  ytext_1_moretext  ytext_2_moretext
0  1                 8                14
1  2                10                16
2  3                12                18
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这两个建议都没有真正按照 OP 的要求“就位”。仍然需要一个赋值“df = df.apply(...)”。 (3认同)