繁体   English   中英

如何使用两个行值在 pandas 中的行之间应用用户定义的 function?

[英]How to apply a user defined function between rows in pandas using both rows values?

我在 Pandas 数据框中有两行数据,并希望使用包含两个值的 function 分别操作每一列,例如

import pandas as pd    
df = pd.DataFrame({"x": [1, 2], "z": [2, 6], "i": [3, 12], "j": [4, 20], "y": [5, 30]})
    x   z   i   j   y
0   1   2   3   4   5
1   2   6   12  20  30

function 类似于第 2 行 val 减去第 1 行 val,除以后者 - 对于每一列分别,例如

(行2-行1)/行2

所以我可以得到以下

0.5  0.667   0.75   0.8   0.833

基于以下链接

如何将用户定义的 function 列应用于 pandas 中的分组数据

https://www.geeksforgeeks.org/apply-a-function-to-each-row-or-column-in-dataframe-using-pandas-apply/

https://pythoninoffice.com/pandas-how-to-calculate-difference-between-rows

Groupby 并应用定义的 function - Pandas

我尝试了以下

df.apply(lambda x,y: (x + y)/y, axis=0)

这不起作用,因为它期望 y 作为参数

df.diff()

这可行,但它不完全是我想要的 function。

有谁知道如何达到我期望的结果?

df.diff(1).div(df)

output

    x   z    i    j   y
0   NaN NaN  NaN  NaN NaN
1   0.5 0.67 0.75 0.8 0.83

我用一个简短的例子回答。 如果我误解了什么,请更长时间地编辑您的示例。 我再回答。

在测试了很多东西之后,我发现不需要在 Lambda function (x,y) 中包含两个变量,而是只包含一个并将其视为列中包含所有值的向量,因此以下解决了这个问题

df.apply(lambda x: (x[1] - x[0]) / x[1], axis=0)

这避免了在第一行中出现 NaN 的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM