簡體   English   中英

pandas,應用參數為 dataframe 行條目

[英]pandas, apply with args which are dataframe row entries

我有一個 pandas dataframe 'df' 有兩列 'A' 和 'B',我有一個 function 有兩個 arguments

def myfunction(B, A):
    # do something here to get the result
    return result

我想使用“應用”將它逐行應用到 df function

df['C'] = df['B'].apply(myfunction, args=(df['A'],))

但我得到了錯誤

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

這里發生了什么,它似乎需要 df['A'] 作為整個系列。 不僅僅是該系列的行條目。

我想你需要:

import pandas as pd
df = pd.DataFrame({'A':[1,2,3],
                   'B':[4,5,6]})

print (df)
   A  B
0  1  4
1  2  5
2  3  6

def myfunction(B, A):
    #some staff  
    result = B + A 
    # do something here to get the result
    return result

df['C'] = df.apply(lambda x: myfunction(x.B, x.A), axis=1)
print (df)
   A  B  C
0  1  4  5
1  2  5  7
2  3  6  9

要么:

def myfunction(x):

    result = x.B + x.A
    # do something here to get the result
    return result

df['C'] = df.apply(myfunction, axis=1)
print (df)
   A  B  C
0  1  4  5
1  2  5  7
2  3  6  9

我會再添加一種方法,當您需要將所有列傳遞給 function 時,它會很有用。

我們認為根據pandas.DataFrame.apply文檔:傳遞給 function 的對象是系列對象 所以我們將pd.Series轉換為list 然后使用*運算符將其解壓縮,同時調用 function。

import pandas as pd
df = pd.DataFrame({'A':[1,2,3],
                   'B':[4,5,6]})

print (df)
   A  B
0  1  4
1  2  5
2  3  6

def myfunction(B, A):
    #some staff  
    result = B + A 
    # do something here to get the result
    return result

df['C'] = df.apply(lambda x: myfunction(*x.to_list()), axis=1)
print (df)
   A  B  C
0  1  4  5
1  2  5  7
2  3  6  9

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM