以周期为参数的列之间的滚动差异
Rolling difference between columns with period as parameter
我有一个数据框:
df = pd.DataFrame({
'BU': ['Total', 'Total', 'Total', 'ABC', 'ABC', 'ABC'],
'Line_Item': ['Revenues','EBT', 'Expenses', 'Revenues', 'EBT', 'Expenses'],
'1Q16': [100, 120, 200, 200, 190, 210],
'2Q16': [120, 120, 100, 200, 190, 210],
'3Q16': [200, 250, 450, 120, 180, 190],
'4Q16': [150, 850, 790, 410, 170, 990],
'1Q17': [120, 240, 790, 10, 170, 990],
'2Q17': [110, 140, 650, 50, 100, 120]})
我想要新的列,列之间有滚动差异。所以我想要年度差异,也就是说,2016 年第 1 季度和 2017 年第 1 季度的收入差异。我也想要季度之间的差异。列之间的句点应该是参数。
我知道如何通过应用 pct_change
函数来获取百分比变化。
df_qtrs_YoY = df[['1Q16', '2Q16', '3Q16', '4Q16', '1Q17', '2Q17']].pct_change(periods=4, axis=1).dropna(1)
我也可以这样做吗?我的数据集很大。因此,矢量化解决方案可能效果最好。输出应如下所示:
df1 = pd.DataFrame({
'BU': ['Total', 'Total', 'Total', 'ABC', 'ABC', 'ABC'],
'Line_Item': ['Revenues','EBT', 'Expenses', 'Revenues', 'EBT', 'Expenses'],
'1Q17': [20, 140, 590, -190, -20, 0],
'2Q17': [-10, 20, -30, -150, -90, -90]})
也许您正在寻找 .diff()
函数?
diff_qtrs_YoY = df[["1Q16", "2Q16", "3Q16", "4Q16", "1Q17", "2Q17"]].diff(
periods=4, axis=1
)
print(df_qtrs_YoY)
打印:
1Q16 2Q16 3Q16 4Q16 1Q17 2Q17
0 NaN NaN NaN NaN 20.0 -10.0
1 NaN NaN NaN NaN 120.0 20.0
2 NaN NaN NaN NaN 590.0 550.0
3 NaN NaN NaN NaN -190.0 -150.0
4 NaN NaN NaN NaN -20.0 -90.0
5 NaN NaN NaN NaN 780.0 -90.0
或每个季度之间:
print(
df[["1Q16", "2Q16", "3Q16", "4Q16", "1Q17", "2Q17"]].diff(periods=1, axis=1)
)
1Q16 2Q16 3Q16 4Q16 1Q17 2Q17
0 NaN 20.0 80.0 -50.0 -30.0 -10.0
1 NaN 0.0 130.0 600.0 -610.0 -100.0
2 NaN -100.0 350.0 340.0 0.0 -140.0
3 NaN 0.0 -80.0 290.0 -400.0 40.0
4 NaN 0.0 -10.0 -10.0 0.0 -70.0
5 NaN 0.0 -20.0 800.0 0.0 -870.0
我有一个数据框:
df = pd.DataFrame({
'BU': ['Total', 'Total', 'Total', 'ABC', 'ABC', 'ABC'],
'Line_Item': ['Revenues','EBT', 'Expenses', 'Revenues', 'EBT', 'Expenses'],
'1Q16': [100, 120, 200, 200, 190, 210],
'2Q16': [120, 120, 100, 200, 190, 210],
'3Q16': [200, 250, 450, 120, 180, 190],
'4Q16': [150, 850, 790, 410, 170, 990],
'1Q17': [120, 240, 790, 10, 170, 990],
'2Q17': [110, 140, 650, 50, 100, 120]})
我想要新的列,列之间有滚动差异。所以我想要年度差异,也就是说,2016 年第 1 季度和 2017 年第 1 季度的收入差异。我也想要季度之间的差异。列之间的句点应该是参数。
我知道如何通过应用 pct_change
函数来获取百分比变化。
df_qtrs_YoY = df[['1Q16', '2Q16', '3Q16', '4Q16', '1Q17', '2Q17']].pct_change(periods=4, axis=1).dropna(1)
我也可以这样做吗?我的数据集很大。因此,矢量化解决方案可能效果最好。输出应如下所示:
df1 = pd.DataFrame({
'BU': ['Total', 'Total', 'Total', 'ABC', 'ABC', 'ABC'],
'Line_Item': ['Revenues','EBT', 'Expenses', 'Revenues', 'EBT', 'Expenses'],
'1Q17': [20, 140, 590, -190, -20, 0],
'2Q17': [-10, 20, -30, -150, -90, -90]})
也许您正在寻找 .diff()
函数?
diff_qtrs_YoY = df[["1Q16", "2Q16", "3Q16", "4Q16", "1Q17", "2Q17"]].diff(
periods=4, axis=1
)
print(df_qtrs_YoY)
打印:
1Q16 2Q16 3Q16 4Q16 1Q17 2Q17
0 NaN NaN NaN NaN 20.0 -10.0
1 NaN NaN NaN NaN 120.0 20.0
2 NaN NaN NaN NaN 590.0 550.0
3 NaN NaN NaN NaN -190.0 -150.0
4 NaN NaN NaN NaN -20.0 -90.0
5 NaN NaN NaN NaN 780.0 -90.0
或每个季度之间:
print(
df[["1Q16", "2Q16", "3Q16", "4Q16", "1Q17", "2Q17"]].diff(periods=1, axis=1)
)
1Q16 2Q16 3Q16 4Q16 1Q17 2Q17
0 NaN 20.0 80.0 -50.0 -30.0 -10.0
1 NaN 0.0 130.0 600.0 -610.0 -100.0
2 NaN -100.0 350.0 340.0 0.0 -140.0
3 NaN 0.0 -80.0 290.0 -400.0 40.0
4 NaN 0.0 -10.0 -10.0 0.0 -70.0
5 NaN 0.0 -20.0 800.0 0.0 -870.0