![](/img/trans.png)
[英]How to apply a function to every value in a column in a pandas 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))
如果您將a
或b
與add
列作為第二個參數一起傳入,則該方法會提供單個列的轉換:
add_vals(df['a'], df['add'])
# [11. 22. 33.]
然后您可以將該方法應用於要轉換的每一列( a
和b
):
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.