import pandas as pd
import numpy as np
np.random.seed(99)
rows = 10
df = pd.DataFrame ({'A' : np.random.choice(range(0, 2), rows, replace = True),
'B' : np.random.choice(range(0, 2), rows, replace = True)})
def get_C1(row):
return row.A row.B
def get_C2(row):
return 'X' if row.A row.B == 0 else 'Y'
def get_C3(row):
is_zero = row.A row.B
return "X" if is_zero else "Y"
df = df.assign(C = lambda row: get_C3(row))
為什么get_C2和get_C3函式會回傳錯誤?
ValueError:系列的真值不明確。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
uj5u.com熱心網友回復:
您在想df.assign,當傳遞一個函式時,其行為類似于df.applywith axis=1,它為每一行呼叫該函式。
那是不正確的。
每對檔案進行df.assign
該值是可呼叫的,在df 上評估
這意味著您傳遞給的函式assign是在整個資料幀而不是每個單獨的行上呼叫的。
因此,在您的函式中get_C3,row引數根本不是一行。這是一個整體的資料框(也應該被重新命名為df或別的東西)等row.A和row.B兩個全列,而不是單個單元格的值。
因此,is_zero也是一整列,并且... if is_zero ...不起作用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/398852.html
