我想像在excel中那样将计算字段添加到Pandas
数据透视表。我计划将totals
添加到pivot table
,因此我希望计算在pd.pivot_table()
内进行。我的数据看起来像这样:
df = {'name' : ['AAA','BBB','CCC','AAA'],
'product' : ['X','Y','Z','W'],
'Jan-2016' : [50,55,80,150],
'Feb - 2016' :[35,55,10,100],
'Jan-2017' : [25,27,40,20],
'Feb - 2017' : [55,25,40,65]}
df = pd.DataFrame(df)
pd.pivot_table(df, values=['Jan-2016','Feb-2016','Jan-2017','Feb-2017','YTD YOY - Jan'],index=['name', 'product'])
Feb-2016 Feb-2017 Jan-2016 Jan-2017
name product
AAA W 100 65 150 20
X 35 55 50 25
BBB Y 55 25 55 27
CCC Z 10 40 80 40
我想在数据透视表中添加一个计算字段,如下所示:
Feb-2016 Feb-2017 Jan-2016 Jan-2017 YTD YOY - Jan
name product
AAA W 100.0 65.00 150.00 20.0 -0.866667
X 35.0 55.00 50.00 25.0 -0.500000
BBB Y 55.0 25.00 55.00 27.0 -0.509091
CCC Z 10.0 40.00 80.00 40.0 -0.500000
提前致谢!
答案 0 :(得分:0)
根据我的理解,您仍然不需要数据透视表。
首先设置您的索引,然后堆叠并获取pct_change
然后unstack
,并仅使用filter
过滤2017列。最后,将它们连接在一起。
df1 = df.set_index(['name', 'product'])
df2 = df1.stack().pct_change().unstack(-1).filter(like='2017')
df2.columns = 'YTD YOY - ' + df2.columns.str.slice(0,3)
df_final = pd.concat([df1, df2], axis=1)
Feb - 2016 Feb - 2017 Jan-2016 Jan-2017 YTD YOY - Feb \
name product
AAA W 100 65 150 20 -0.350000
X 35 55 50 25 0.571429
BBB Y 55 25 55 27 -0.545455
CCC Z 10 40 80 40 3.000000
YTD YOY - Jan
name product
AAA W -0.866667
X -0.500000
BBB Y -0.509091
CCC Z -0.500000
您的计算不需要数据透视表。您只需设置索引,然后调用pct_change
方法。
df = df.set_index('names')
df['YTD YOY'] = df.pct_change(axis=1).dropna(axis=1)
Jan-2016 Jan-2017 YTD YOY
names
AAA 50 25 -0.500000
BBB 55 27 -0.509091
CCC 80 40 -0.500000