有人能帮帮我吗?
我有一个巨大的 Dataframe 要处理(9万行),我需要应用此逻辑,但我只能想到使用“for”循环来解决问题,这几乎需要2个小时的运行时间......有人能给予我如何优化代码吗?
其逻辑如下:对于每个“客户”,我需要检查其“FinalKey”是否存在于“Key”列中。如果存在,则此客户的“Final Name”将与“Key”中相同“FinalKey”的“Customer”中重复次数最多的名称相同。下面是一个示例:
创建 Dataframe df
data = [['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
df
| 客户|关键词|最终密钥|最终名称|
| - ------|- ------|- ------|- ------|
| 汤姆|一百二十三|一百二十三||
| 汤姆|五十四|一百二十三||
| 汤姆|二十一|一百二十三||
| 汤姆2|一百二十三|一百二十三个||
| 汤姆3|一百二十三|一百二十三||
| 汤姆3|一百二十三|一百二十三||
| 约翰|四十五|四十五||
| 玛丽|四十一|四十一||
逻辑是这样的:
逻辑
for i in range(0, len(df['Customer'])):
if str(df.loc[i, 'FinalKey']) in list(df['Key']):
df.loc[i, 'Final Name'] = df[df['Key']==df.loc[i, 'FinalKey']]['Customer'].value_counts().idxmax()
else:
df.loc[i, 'Final Name'] = ""
df
| Customer | Key | FinalKey | Final Name |
| -------- | ------- | -------- | ---------- |
| Tom | 123 | 123 | Tom3 |
| Tom | 54 | 123 | Tom3 |
| Tom | 21 | 123 | Tom3 |
| Tom2 | 123 | 123 | Tom3 |
| Tom3 | 123 | 123 | Tom3 |
| Tom3 | 123 | 123 | Tom3 |
| John | 45 | 45 | John |
| Mary | 23 | 41 | |
1条答案
按热度按时间ttisahbt1#
我肯定有更好的办法,但这个有效: