我有这样一个数据帧:
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+行,这使得我的程序工作非常慢。我想知道是否有其他快速的方法得到结果。谢谢你
你的感觉是对的。一般来说,在使用pandas或numpy时,循环通常是一种较差的方法,因为使用这些库的全部目的是以比在每一行上循环更有效的方式处理数据集
您正在寻找的方法是pivot,如下所述。 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.pivot.html
在代码中,如下所示:
df2 = df1.pivot(index='Customer', columns='Item', values='Qty')
相关问题 更多 >
编程相关推荐