我正在尝试使用
创建新功能df_transactions['emome'] = df_transactions['emome'].apply(lambda x: 1 if df_transactions['plan_list_price'] ==0 & df_transactions['actual_amount_paid'] > 0 else 0).astype(int)
但它引发了错误
ValueError:系列的真值是不明确的。使用a.empty, a.bool(),a.item(),a.any()或a.all()。
当plan_list_price为0且actual_amount_paid为> 0时,如何创建一个返回1的新列?
我还想使用pandas apply。
答案 0 :(得分:1)
你真的很接近,但更好的是没有pip3 install --upgrade image
的矢量化解决方案 - 得到布尔掩码并转换为apply
:
int
如果真的想要更慢mask = (df_transactions['plan_list_price'] == 0) &
(df_transactions['actual_amount_paid'] > 0)
df_transactions['emome'] = mask.astype(int)
:
apply
样品:
f = lambda x: 1 if x['plan_list_price'] ==0 and x['actual_amount_paid'] > 0 else 0
df_transactions['emome'] = df_transactions.apply(f, axis=1)
<强>计时强>:
df_transactions = pd.DataFrame({'A':list('abcdef'),
'plan_list_price':[0,0,0,5,5,0],
'actual_amount_paid':[-1,0,9,4,2,3]})
mask = (df_transactions['plan_list_price'] == 0) & \
(df_transactions['actual_amount_paid'] > 0)
df_transactions['emome1'] = mask.astype(int)
f = lambda x: 1 if x['plan_list_price'] ==0 and x['actual_amount_paid'] > 0 else 0
df_transactions['emome2'] = df_transactions.apply(f, axis=1)
print (df_transactions)
A actual_amount_paid plan_list_price emome1 emome2
0 a -1 0 0 0
1 b 0 0 0 0
2 c 9 0 1 1
3 d 4 5 0 0
4 e 2 5 0 0
5 f 3 0 1 1
答案 1 :(得分:0)
一些问题:
来自文档:
轴:{0或'index',1或'columns'},默认为0, 功能已应用:
0或“索引”:将功能应用于每一列。 1个或“列”:应用 对每一行起作用。
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html