【发布时间】:2022-01-23 09:33:55
【问题描述】:
df 格式如下:
Zip Code | State | Carrier | Price
__________________________________
xxxxx | XX | ABCD | 12.0
xxxxx | XX | TUSD | 15.0
xxxxx | XX | PPLD | 17.0
代码:
carrier_sum = []
unique_carrier = a_df['Carrier'].unique()
for i in unique_carrier:
x=0
for y, row in a_df.iterrows():
x = a_df.loc[a_df['Carrier'] == i, 'Prices'].sum()
print(i, x)
carrier_sum.append([i,x])
这是我的代码,起初它创建了一个 unique_carrier 列表。然后对于每个运营商,iterrows() 通过 df 获取“价格”并将其相加,将 carrier_sum 返回到我创建的空 df。
问题是它似乎要花很长时间,我的意思是我运行了一次,它花了 15 多分钟才得到第一个唯一运营商总和的总和,其中有 8 个。
我可以做些什么来提高效率?
数据集长度超过 300000 行。
我想到的一种方法是继续设置一个列表,其中包含预先确定的唯一运营商,因为我真的不需要在 df 中查找它,我想到的另一件事是通过以下方式组织主数据集承运人名称按字母顺序排列,并使唯一的承运人列表与其在数据集中的方式保持一致。
感谢您的阅读。
【问题讨论】:
-
您可以在不使用
groupby和sum循环的情况下执行此操作。你用过吗? -
我有,我现在就试试。感谢您的意见。
标签: python-3.x excel pandas