3 回答

TA貢獻1906條經驗 獲得超3個贊
row不是您的 函數lambda,因此括號不合適,相反,您應該使用__getitem__方法或loc訪問器來訪問值。前者的語法糖是[]:
df['result'] = df.apply(lambda row: freq_value((row['a'], row['b'], row['c'])), axis=1)
使用loc替代方案:
def freq_value_calc(row):
return freq_value((row.loc['a'], row.loc['b'], row.loc['c']))
要準確理解為什么會出現這種情況,將您lambda的函數重寫為命名函數會有所幫助:
def freq_value_calc(row):
print(type(row)) # useful for debugging
return freq_value((row['a'], row['b'], row['c']))
df['result'] = df.apply(freq_value_calc, axis=1)
運行這個,你會發現它row的類型是<class 'pandas.core.series.Series'>,即如果你使用axis=1. 要訪問給定標簽的系列中的值,您可以使用__getitem__/[]語法或loc.

TA貢獻1873條經驗 獲得超9個贊
您也可以使用df.mode, 和來獲得所需的結果axis=1。這將避免使用apply, 并且仍然會為您提供每行最常見值的列。
df['result'] = df.mode(1)
>>> df
a b c result
0 1 1 1 1
1 2 1 2 2
2 1 2 2 2
3 2 1 1 1
4 1 1 2 1
5 2 1 2 2
6 1 2 2 2
7 1 2 1 1
添加回答
舉報