gpt4 book ai didi

python - 我如何在逐行移动时在python中使用apply函数

转载 作者:行者123 更新时间:2023-12-04 08:58:30 25 4
gpt4 key购买 nike

如果有人在一年内在成员列表中获胜,我会尝试将 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']})
enter image description here
从数据框中,我想根据字典查看每年(数据框的年份)是否有任何获奖者。
例如,让我们看看第一行。 Momo 于 2010 年获胜,Moon 于 2012 年获胜,因此所需的数据帧输出应如下所示:
enter image description here
所以这是到目前为止的代码:
df['winner'] = 0 #empty column
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 行,我认为如果使用 pandas 'apply' 来解决这个问题是可能的。
已经在不使用 Pandas 的情况下尝试了 double for 循环,这花了太长时间。
我尝试使用 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]
现在合并并找到与成员(member)的奖励交集
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

关于python - 我如何在逐行移动时在python中使用apply函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63686298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com