熊猫apply():如何根据字符串匹配将选定的列相乘并返回完整的数据框

时间:2019-05-08 08:57:25

标签: python pandas apply

我有名称,FDR%,年龄,FCR%,收入等列。我想选择字符串匹配'%'的列并乘以100。最后,我想返回带有'%'的整个数据框列值更改。我尝试如下:

df_final=df_1.filter(like='%', axis=1).apply(lambda x:x*100)
df_final

这只是返回子集,即按FDR%和FCR%操作的列。我需要返回带有相应更改的整个数据框。

还有没有更好的方法来实现相同目标?

1 个答案:

答案 0 :(得分:2)

您可以从filter返回的DataFrame中选择列,并从100返回多个列:

df_1 = pd.DataFrame({
        'A':list('abcdef'),
         'FDR%':[4,5,4,5,5,4],
         'C':[7,8,9,4,2,3],
         'FCR%':[1,3,5,7,1,0],
         'E':[5,3,6,9,2,4],
})

cols = df_1.filter(like='%').columns
df_1[cols] *= 100
print (df_1)
   A  FDR%  C  FCR%  E
0  a   400  7   100  5
1  b   500  8   300  3
2  c   400  9   500  6
3  d   500  4   700  9
4  e   500  2   100  2
5  f   400  3     0  4

或使用Series.str.containsSeries.str.endswith使用掩码,并选择带有DataFrame.loc的列:

mask = df_1.columns.str.contains('%')
#alternative
#mask = df_1.columns.str.endswith('%')
df_1.loc[:, mask] *= 100

通知

apply此处的倍数是错误的选择,因为在内部循环很慢。快速解决方案仅是标量的倍数。