我有一个这样的数据框:
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+行,这使得我的程序运行速度非常慢。我想知道是否有任何其他快速方法来获得结果。谢谢!
答案 0 :(得分:0)
你的感觉是正确的。通常,当使用pandas或numpy循环通常是一种较差的方法时,因为使用这些库的重点是以比循环每一行更有效的方式处理数据集。
您正在寻找的方法是此处所述的数据透视表。 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.pivot.html
在代码中,这将是这样的:
df2 = df1.pivot(index='Customer', columns='Item', values='Qty')