将 Pandas 数据框行值汇总为平均值和总和

我有一个如下的数据框:


data =[['A','ABC001','18M01',1,3],['A','ABC002','18M01',2,4],['A','ABC001','18M02',3,3],['B','ABC001','18M01',4,3],['B','ABC002','18M02',5,4],['B','ABC002','18M02',6,4]]

df = pd.DataFrame(data,columns=['Type','Product','Month','Requirement','Inventory'])

df

输入:


Type Product Month Requirement Inventory

A    ABC001  18M01     1         3

A    ABC002  18M01     2         4

A    ABC001  18M02     3         3

B    ABC001  18M01     4         3

B    ABC002  18M02     5         4

B    ABC002  18M02     6         4

我想做的是将它总结成一个像这样的数据框


输出:


Type    Product           Values         18M01    18M02

A       ABC001      Sum of Requirement     1       3

A       ABC001      Average of Inventory   3       3

A       ABC002      Sum of Requirement     2      NaN

A       ABC002      Average of Inventory   4      NaN

B       ABC001      Sum of Requirement     4      NaN

B       ABC001      Average of Inventory   3      NaN

B       ABC002      Sum of Requirement    NaN      11

B       ABC002      Average of Inventory  NaN      4

我可以很容易地在 pivot excel 中创建它,但是在使用 pandas pivot 时完全不知道。请帮忙


LEATH
浏览 184回答 2
2回答

守着一只汪

我想你需要通过汇总sum和mean,通过扁平化多指标列和重塑stack有unstack:df1 = (df.groupby(['Type','Product','Month'])         .agg({'Requirement': 'sum','Inventory':'mean'})         .rename(columns={'Requirement':'Sum of Requirement',                          'Inventory':'Average of Inventory'})         .stack()         .unstack(2)         .reset_index()         .rename(columns={'level_2':'Values'}))print (df1)Month Type Product                Values  18M01  18M020        A  ABC001    Sum of Requirement    1.0    3.01        A  ABC001  Average of Inventory    3.0    3.02        A  ABC002    Sum of Requirement    2.0    NaN3        A  ABC002  Average of Inventory    4.0    NaN4        B  ABC001    Sum of Requirement    4.0    NaN5        B  ABC001  Average of Inventory    3.0    NaN6        B  ABC002    Sum of Requirement    NaN   11.07        B  ABC002  Average of Inventory    NaN    4.0

白板的微信

pivot_table做事的一种方式——df1 = df.pivot_table('Requirement', ['Type','Product'], 'Month', aggfunc='sum')df1['Values'] = 'Sum of Requirement'df2 = df.pivot_table('Inventory', ['Type','Product'], 'Month', aggfunc='mean')df2['Values'] = 'Average of Inventory'df1.append(df2)输出Month         18M01  18M02                ValuesType ProductA    ABC001     1.0    3.0    Sum of Requirement     ABC002     2.0    NaN    Sum of RequirementB    ABC001     4.0    NaN    Sum of Requirement     ABC002     NaN   11.0    Sum of RequirementA    ABC001     3.0    3.0  Average of Inventory     ABC002     4.0    NaN  Average of InventoryB    ABC001     3.0    NaN  Average of Inventory     ABC002     NaN    4.0  Average of Inventory你可以扔进reset_index()去让它变得更好 -df1.append(df2).reset_index()Month Type Product  18M01  18M02                Values0        A  ABC001    1.0    3.0    Sum of Requirement1        A  ABC002    2.0    NaN    Sum of Requirement2        B  ABC001    4.0    NaN    Sum of Requirement3        B  ABC002    NaN   11.0    Sum of Requirement4        A  ABC001    3.0    3.0  Average of Inventory5        A  ABC002    4.0    NaN  Average of Inventory6        B  ABC001    3.0    NaN  Average of Inventory7        B  ABC002    NaN    4.0  Average of Inventory
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python