我有一个巨大的数据集,我需要计算每一行的重复项的数量。例如:在特定行中,我有客户X。我需要创建一个新列,该列将显示客户X在数据集中注册的次数。我做了一个关于这方面的代码,但性能非常差。我将花费大约3天的时间,直到数据集完成。有人能帮助提高这个计算的性能吗?下面是我的想法的一个例子:
#importing resources
import sys
import pandas as pd
from __future__ import print_function#creating a dataset as example:
df1= pd.DataFrame({'Customer':["Wilfred","Abner","Rishcash","Debie"],'Dealer':["Alpha","Beta","Gama","Delta"],'Vehicle_model':["Jeep","Volks","Chrysler","Volvo"],'CITY':["Osasco","Denver","Rome","Tokyo"]})#creating new columns
df1['Qtd leads']=1
df1['Qtd dealers']=1
df1['Leads City']=1
df1['Leads State']=1
df1['Leads V_Model']=1#function to estimate repetitive values
def cont(quem):
a=df1['Customer'].value_counts()[quem]
return a#iterate in the dataset
i=0
for i in df1.index:
df1['Qtd leads'][i]=df1['Customer'].value_counts()[df1['Customer'][i]]
df1['Qtd dealers'][i]=df1['Dealer'].value_counts()[df1['Dealer'][i]]
df1['Leads V_Model'][i]=df1['Vehicle_model'].value_counts()[df1['Vehicle_model'][i]]
df1['Leads City'][i]=df1['CITY'].value_counts()[df1['CITY'][i]]
print(i, end='\r')
sys.stdout.flush()发布于 2020-07-29 06:26:52
您可以使用groupby和merge。
城市示例:
dfcity = df1.groupby(by='CITY').size().reset_index().rename(columns={0 : 'Leads City'})
df1 = pd.merge(df1,dfcity,on='CITY')df1.groupby(by='CITY')根据“城市”对你的数据帧进行分组。这为你提供了一个groupby对象,它有很多很好的函数来查看这些分组的数据--例如size()。
然后,.size()为您提供一个以城市为索引的数据帧,以及它被视为第0列的频率。
然后,reset_index()将索引还原为列,因此您有两列: CITY和0。
接下来,重命名0列(.rename(columns={0 : 'Leads City'}))
最后,将原始数据帧与列'CITY‘中的新数据帧合并
df1 = pd.merge(df1,dfcity,on='CITY')
您可以对要计数的每一列重复此操作。
https://stackoverflow.com/questions/63143081
复制相似问题