繁体   English   中英

有没有更好的方法来替换 python 中的“for”循环?

[英]Is there a better way to replace the "for" loop in python?

有人能帮我吗?

我有一个巨大的数据框要处理(9 万行),我需要应用这个逻辑,但我只能考虑使用“for”循环来解决问题,这需要将近 2 个小时才能运行......可以有人告诉我如何优化代码吗?

逻辑如下:对于每个'Customer',我需要检查'Key'列中是否存在他的'FinalKey'。 如果存在,则此客户的“最终名称”将与“客户”中重复次数最多的名称相同,对于“Key”中的相同“FinalKey”。 下面是一个例子:


创建数据框 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']=''

打印数据框

去向


顾客 钥匙 最终密钥 最终名称
汤姆 123 123
汤姆 54 123
汤姆 21 123
汤姆2 123 123
汤姆3 123 123
汤姆3 123 123
约翰 45 45
玛丽 41 41

这是逻辑:


逻辑

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'] = ""

去向



| 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   |            |

我确定有更好的方法,但这有效:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM