首页 > 解决方案 > 有没有办法使用 pandas Dataframe.eval 而不是 Dataframe.max 来获得最大值?

问题描述

有没有办法使用 获得每行的最大值eval

能够写出类似这样的东西会很甜蜜:

X = pd.DataFrame({'A':[1,2,3,4]})
X.eval("""B = 2* A
          C = A +B
          D = max(A, B)
          E = 2 * D
          """, inplace = True)

代替:

X = pd.DataFrame({'A':[1,2,3,4]})
X.eval("""B = 2* A
          C = A +B
          """, inplace = True)

X['D'] = X.loc[:,['A', 'B']].max(axis=1)

X.eval('E = 2 * D', inplace=True)

编辑:正如@mephisto 所建议的,与此类似的东西效果很好:

def rowmax(A,B):
   return pd.concat([A,B], axis=1).max(axis=1)

X = pd.DataFrame({'A':[0, 1,2,3,4]})
X.eval("""B = A % 2 +1
          D = @rowmax(A, B)
       """, inplace = True)

我有兴趣了解其他替代方案。

标签: pandas

解决方案


您应该能够使用 调用自定义或预定义函数@。在你的情况下你想打电话df.max(),所以试试这个X.eval('@df.max()')
希望这可以帮助


推荐阅读