假設我有如下資料:
df = pd.DataFrame(
{
"product": np.random.choice(["p1", "p2", "p3"], 1000),
"sales": np.random.randint(0, 1000, 1000),
"april": np.random.randint(0, 2, 1000),
"march": np.random.randint(0, 2, 1000),
"february": np.random.randint(0, 2, 1000),
}
)
在哪里:
- “產品”是產品類別
- “銷售額”是產品的總銷售額
- “四月”、“三月”、“二月”……是顯示特定產品是否在特定月份打折的標志。
我有數十億這樣的行。
然后我通過 SQL 聚合這樣的資料:
df.groupby(["april", "march", "february", "product"]).agg({"sales": "sum"})
并將其傳遞給熊貓。
有沒有一種很好的方法來透視資料,以便我可以顯示:
- 產品名稱作為行
- 月為列
- 和積極的銷售作為價值
沒有明確地迭代幾個月并逐個加入結果?
uj5u.com熱心網友回復:
您可以做的是融化您的 DF(將其變長而不是變寬),將產品和銷售額保持為列行,但將您的月份列分解為單獨的列,然后您可以使用該列進行相應的旋轉,并僅針對該列進行過濾產品銷售的月份,例如:
pt = (
df.melt(id_vars=['product', 'sales'], var_name='month')
.query('value == 1')
.pivot_table(index='product', columns='month', values='sales', aggfunc='sum')
)
鑒于我最終得到的隨機樣本給了你:
month april february march
product
p1 83867 76609 80505
p2 74135 67823 64843
p3 94081 84000 107928
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/469033.html
