簡體   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