适用于熊猫DataFrame的列满足条件[英] inplace apply to columns of pandas dataframe satisfying conditions

本文是小编为大家收集整理的关于适用于熊猫DataFrame的列满足条件的处理方法,想解了适用于熊猫DataFrame的列满足条件的问题怎么解决?适用于熊猫DataFrame的列满足条件问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

考虑以下熊猫数据框:

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

我想应用一个函数(例如乘以2),以包含字符的名称'x'

这可以通过:

来完成
df.filter(regex='x').apply(lambda c: 2*c)

,但没有到位.我的解决方案是:

tmp = df.filter(regex='x')
tmp = tmp.apply(lambda c: 2*c)
tmp['t'] = df['t']
df = tmp

具有更改列的顺序的附加问题.有没有更好的办法?

推荐答案

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

更新:

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

其他推荐答案

使用df.columns.str.contains('x')使布尔面膜切成df

df.loc[:, df.columns.str.contains('x')] *= 2
print(df)

   t  x1  x2
0  1   8  14
1  2  10  16
2  3  12  18

更广泛的

def f(x):
    return 2 * x

m = df.columns.str.contains('x')
df.loc[:, m] = f(df.loc[:, m])
print(df)

   t  x1  x2
0  1   8  14
1  2  10  16
2  3  12  18

使用apply

m = df.columns.str.contains('x')
df.loc[:, m] = df.loc[:, m].apply(f)
print(df)

   t  x1  x2
0  1   8  14
1  2  10  16
2  3  12  18

本文地址:https://www.itbaoku.cn/post/1727911.html