学习在熊猫中使用地图

Jav*_*ini 1 python-3.x pandas map-function

我想逐行为两个数据帧列df1和df2建模这个excel公式:

=IF(df1 > df2; df2; df2 - df1)
Run Code Online (Sandbox Code Playgroud)

我知道这可以用Python中的map来完成,但不知道怎么做.我可以使用for循环和if-else语句来完成它,但它使我的代码更难阅读.

你能帮助我吗?

ayh*_*han 5

这实际上是一个工作maskwhere.

df2.mask(df1 <= df2, df2 - df1)
Run Code Online (Sandbox Code Playgroud)

要么,

df2.where(df1 > df2, df2 - df1)
Run Code Online (Sandbox Code Playgroud)

更一般地说,这是来自numpy:

np.where(df1 > df2, df2, df2 - df1)
Run Code Online (Sandbox Code Playgroud)

对于这些示例DataFrames:

df1
Out: 
          A         B         C
0  0.446762 -0.435975  0.109038
1 -0.729108  3.670354  0.761667
2 -0.244370 -0.256956 -1.831161

df2
Out: 
          A         B         C
0 -1.192108  0.074628 -0.087634
1 -0.324098  0.698479 -0.287896
2  1.807863 -2.564992 -2.361296
Run Code Online (Sandbox Code Playgroud)

前两个收益率

          A         B         C
0 -1.192108  0.510603 -0.087634
1  0.405010  0.698479 -0.287896
2  2.052233 -2.564992 -2.361296
Run Code Online (Sandbox Code Playgroud)

np.where 返回一个numpy数组,因此您可能需要将其转换回DataFrame:

array([[-1.19210755,  0.51060284, -0.08763422],
       [ 0.40500973,  0.69847936, -0.28789618],
       [ 2.05223294, -2.56499239, -2.36129577]])
Run Code Online (Sandbox Code Playgroud)