标题>
有人能帮帮我吗?
我有一个巨大的数据框架工作(9万行),我需要应用这个逻辑,但我只能想到解决问题使用'for'循环,这需要近2个小时的运行…有人能告诉我如何优化代码吗?
逻辑如下:对于每个"Customer",我需要检查他的"FinalKey"是否存在于"Key"列中。如果存在,则该客户的"Final Name"将与"Key"中相同的"FinalKey"中"customer"中重复次数最多的名称相同。下面是一个例子:
创建数据框dfdata = [['Tom','123', '123'], ['Tom', '54', '123'],
['Tom', '21', '123'], ['Tom2', '123', '123'],
['Tom3', '123', '123'], ['Tom3', '123', '123'],
['John', '45', '45'], ['Mary', '23', '41']]
df = pd.DataFrame(data, columns=['Customer', 'Key', 'FinalKey'])
df['Final Name']=''
<标题>打印dataframe h1> df
Customer | Key | FinalKey | Final Name | 123 | 123 | 汤姆 |
---|---|---|---|
54 | 123 | ||
21 | 123 | ||
Tom2 | 123 | 123 | |
Tom3 | 123 | 123 | |
Tom3 | 123 | 123 | |
45 | 45 | ||
41 | 41 |
我相信有更好的方法,但这是可行的:
top_cust_by_key = df[['Key', 'Customer']].groupby('Key').agg(lambda x: x.value_counts().index[0])['Customer']
df['Final Name'] = df['FinalKey'].map(top_cust_by_key)