我有一个数据帧df
,它有以下值:
activityType activity_preferance
userID
agashi1996 joinClub Nan
agashi1998 post Nan
agashi1998 post Nan
agashi1998 post Nan
agashi1994 followuser Nan
userID
列是此处的索引
如果activityType
分别是joinClub
、post
、followuser
,我想用1,2和3填充activity_preferance
列
我写了这段代码:
for i,row in df_activity_filter.iterrows():
if (df_activity_filter.loc[i,'activityType'] == 'joinClub'):
df_activity_filter.loc[i,'activity_preferance'] = 1
elif (df_activity_filter.loc[i,'activityType'] == 'post'):
df_activity_filter.loc[i,'activity_preferance'] = 2
elif (df_activity_filter.loc[i,'activityType'] == 'followuser'):
df_activity_filter.loc[i,'activity_preferance'] = 3
我得到一个错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
所需的数据帧/输出应如下所示:
activityType activity_preferance
userID
agashi1996 joinClub 1
agashi1998 post 2
agashi1998 post 2
agashi1998 post 2
agashi1994 followuser 3
有什么帮助吗
循环非常慢。您应该在此处使用^{} :
与其他解决方案的性能比较:
我的解决方案:
@Djib2011的解决方案:
@JenilDave的解决方案:
@yashjain的解决方案:
th;dr我认为您实际上想要的是将
"activityType"
的值映射到整数。这最好由'map' method of pd.Series完成错误的意思是,如果您有这样一个系列(
ser
):它的真值可能不明确(即它是真的还是假的?)。如果我要写,python应该做什么:
没有明确的答案,因为
ser
的布尔值是不明确的,因此会引发错误Mayank提供了一个很好的答案,您仍然可以探索pandas
apply
方法相关问题 更多 >
编程相关推荐