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)
这增加了更改列顺序的问题。有没有更好的办法?
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)
| 归档时间: |
|
| 查看次数: |
4982 次 |
| 最近记录: |