如果有人一年内在会员名单中获胜,我想在“获胜者”栏中输入0或1。有一本获奖字典。
award_winner = {'2010':['Momo','Dahyum'],'2011':['Nayeon','Sana'],'2012':['Moon','Jihyo']}
这是数据帧:
df = pd.DataFrame({'member':[['Jeong-yeon','Momo'],['Jay-z','Bieber'],['Kim','Moon']],'year' : ['2010','2011','2012']})
从数据框架中,我想查看基于字典的每年(数据框架的年份)是否有获奖者。
例如,让我们看第一行。Momo于2010年获胜,Moon于2012年获胜,因此数据框的预期输出应如下所示:
所以这是到目前为止的代码:
df['winner'] = 0 #empty coloumn
def winner_classifier():
for i in range(len(df['member'])): #searching if there are any award winner in df
if df['member'][row][i] in award_winner[df['year'][row]]: #I couldn't make row to
return 1
else:
continue
df['winner'] = df['member'].apply(winner_classifier)
要么
在这里,我无法分配行。我希望代码能够根据字典中的年份确定是否有获奖者。因此,代码应逐行检查,但我不能,
我总结了这样的问题,以在堆栈溢出中询问。但是有超过10,000行,我认为如果使用熊猫“ apply”来解决这个问题是可能的。已经在不使用熊猫的情况下尝试了两次for loop,这花费了太长时间。我试图使用groupby()但我想知道我应该如何使用..喜欢..
df['winner'] = df['year'].groupby().apply(winner_classifier)..?
你能帮我吗?
谢谢 :)
从字典创建df,以便稍后合并
winners = pd.DataFrame({
'year' : list(award_winner.keys()),
'winner': list(award_winner.values())})
print (winners)
year winner
0 2010 [Momo, Dahyum]
1 2011 [Nayeon, Sana]
2 2012 [Moon, Jihyo]
现在合并并找到奖励与会员的交集
result = df.merge(winners, on="year")
result['result'] = result.apply(
lambda x: len(set(x.member).intersection(x.winner)) != 0, axis=1)
result = result.drop(['winner'], axis=1)
print (result)
member year result
0 [Jeong-yeon, Momo] 2010 True
1 [Jay-z, Bieber] 2011 False
2 [Kim, Moon] 2012 True
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句