[英]pandas groupby and convert rows to columns
我有如下銷售數據集:df1
district item Year salesAmount
Arba pen 2019 10
Arba pen 2019 20
Arba pencil 2018 30
Arba pencil 2018 30
Arba pencil 2019 30
Cebu pen 2019 100
Cebu pen 2019 300
Cebu pen 2018 100
Cebu pen 2018 100
Cebu pen 2019 100
Cebu laptop 2019 20000
Cebu laptop 2018 20000
Cebu fruit 2019 200
Cebu fruit 2018 800
Cebu fruit 2019 800
Cebu fruit 2018 100
我可以完成 groupby 並分別獲得 2018 年和 2019 年每個產品的總和。
result = df1.groupby(['district', 'item', 'Year'], as_index=False)['salesAmount'].sum()
但我想有一個表格列如下 inroder 做進一步的列轉換
預期輸出:
district item 2018_sales 2019_sales
Arba pen 0 30
Arba pencil 60 30
Cebu pen 500 200
Cebu laptop 20000 20000
Cebu fuit 900 1000
謝謝。
鑒於您之前對result
計算,只需使用數據透視表和一些額外的格式化步驟來擴展它。 請注意,默認aggfunc
為pivot_table
是'mean'
,但考慮到這些值已在上一步中聚集也不會,如果你喜歡使用有所作為np.sum
。
result = (
result
.pivot_table(index=['district', 'item'], columns=['Year'], values='salesAmount', fill_value=0)
.add_suffix('_sales')
.reset_index()
)
result.columns.name = None
>>> result
district item 2018_sales 2019_sales
0 Arba pen 0.0 30.0
1 Arba pencil 60.0 30.0
2 Cebu fruit 900.0 1000.0
3 Cebu laptop 20000.0 20000.0
4 Cebu pen 200.0 500.0
當然,你也可以忘記最初的groupby
直接做pivot_table
:
result = (
df1
.pivot_table(
index=['district', 'item'],
columns=['Year'],
values='salesAmount',
fill_value=0,
aggfunc='sum'
)
.add_suffix('_sales')
.reset_index()
)
您可以使用數據透視表
df.pivot_table(values='salesAmount', index=['district', 'item'], columns=['Year'], aggfunc=np.sum)
Year 2018 2019
district item
Arba pen NaN 30.0
pencil 60.0 30.0
Cebu fruit 900.0 1000.0
laptop 20000.0 20000.0
pen 200.0 500.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.