将值逐行写入数据帧太慢

问题描述 投票:0回答:1

我有这样的数据帧:

df1=

Customer | Item | Qty   
----------------------
001      |A     | 3   
001      |B     | 3    
002      |C     | 4  
002      |D     | 8 
...      |...   |...

我希望将数据帧转换为如下格式:

df2=

Customer | A | B | C | D |...   
-----------------------------
001      | 3 | 3 | 0 | 0 |...
002      | 0 | 0 | 4 | 8 |...

我通过以下代码执行此操作:

customer_list=list(set(df1.Custmer.values))
item_list=list(set(df1.Item.values))
df2=pd.DataFrame(columns=["Customer"]+item)
df2["Customer"]=customer_list
for index in df1.index:
    df2.loc[df2["Customer"]==df1.loc[index,"Customer"],df1.loc[index,"Item"]]=df1.lic[index,"Qty"]

但是,我的原始数据非常大,df1有1000000+行,这使得我的程序运行速度非常慢。我想知道是否有任何其他快速方法来获得结果。谢谢!

python dataframe
1个回答
0
投票

你的感觉是正确的。通常,当使用pandas或numpy循环通常是一种较差的方法时,因为使用这些库的重点是以比循环每一行更有效的方式处理数据集。

您正在寻找的方法是如此处所述的枢轴。 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.pivot.html

在代码中,这将是这样的:

df2 = df1.pivot(index='Customer', columns='Item', values='Qty')

© www.soinside.com 2019 - 2024. All rights reserved.