繁体   English   中英

将函数应用于 DataFrame 中的每个单元格并包含来自特定列的值

[英]Apply function to every cell in DataFrame and include value from specific column

假设我有一个像这样的 Pandas DataFrame:

import pandas as pd
df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6], 'add': [10, 20, 30]})

我想对 'a' 和 'b' 列中的每个单元格执行一个操作,其中包括该行的单元格值和 'add' 列的值。 这是一个示例操作:

def add_vals(val, adder):
    if adder % val == 0:
        return val + adder
    else:
        return val + (val / adder)

我知道我可以用df.apply做到这df.apply ,但我一直无法弄清楚如何将add列中的值add到函数中。 我的猜测是语法接近于此,但我还没有让它工作:

df.apply(lambda x: x.apply(add_vals, args=(x['add'])))

在熊猫中做到这一点的最佳方法是什么? 它不一定是最有效的,但我希望它是好的 Pandas 代码。

编辑:

输出应如下所示:

output = pd.DataFrame({'a': [11,22,33], 'b': [4.4,25,36]})

使用numpy.where量化add_vals方法:

import numpy as np
def add_vals(vals, adders):
    return np.where(adders % vals == 0, vals + adders, vals + (vals / adders))

如果您将abadd列作为第二个参数一起传入,则该方法会提供单个列的转换:

add_vals(df['a'], df['add'])
# [11. 22. 33.]

然后您可以将该方法应用于要转换的每一列( ab ):

df[['a', 'b']].apply(add_vals, adders=df['add'])

#      a     b
#0  11.0   4.4
#1  22.0  25.0
#2  33.0  36.0

从您的数据框开始:

import pandas as pd
df = pd.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6], "add": [10, 20, 30]})

然后我创建一个行函数,将您的函数应用于每一行:

def add_vals(val, adder):
    if adder % val == 0:
        return val + adder
    else:
        return val + (val / adder)


def row_add_vals(df, col):
    return df.apply(lambda row: add_vals(row[col], row["add"]), axis=1)

将函数应用于每一列:

df["a"] = row_add_vals(df, "a")
df["b"] = row_add_vals(df, "b")

输出:

    a     b  add
0  11   4.4   10
1  22  25.0   20
2  33  36.0   30

暂无
暂无

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

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