我有两个变量相同但年份不同的数据框:
df2016 = pd.DataFrame({"ID": [100,101,102,103], "A": [1,2,3,4], "B": [2,4,6,8], "year": [2016,2016,2016,2016]})
ID A B year
0 100 1 2 2016
1 101 2 4 2016
2 102 3 6 2016
3 103 4 8 2016
df2017 = pd.DataFrame({"ID": [100,101,102,103], "A": [5,6,7,8], "B": [9,11,13,15], "year": [2017,2017,2017,2017]})
ID A B year
0 100 5 9 2017
1 101 6 11 2017
2 102 7 13 2017
3 103 8 15 2017
我想将这些结合起来,然后首先将变量"A"与时间进行差分,以创建一个新变量"delta_A",该变量给出2017年至2016年间每个"ID"的"A"的变化.结果应该是这样的
期望输出
A B delta_A
ID year
100 2016 1 2 NaN
101 2016 2 4 NaN
102 2016 3 6 NaN
103 2016 4 8 NaN
100 2017 5 9 4
101 2017 6 11 4
102 2017 7 13 4
103 2017 8 15 4
如果可能的话,我想在multi_索引设置中工作,因为我认为这对其他事情很有用.其他答案显示了如何使用序列.diff()方法,但不显示如何使用多索引.
以下是我try 的内容:
df = pd.concat([df2016, df2017])
df
ID A B year
0 100 1 2 2016
1 101 2 4 2016
2 102 3 6 2016
3 103 4 8 2016
0 100 5 9 2017
1 101 6 11 2017
2 102 7 13 2017
3 103 8 15 2017
df.set_index(["ID", "year"], inplace=True)
df
A B
ID year
100 2016 1 2
101 2016 2 4
102 2016 3 6
103 2016 4 8
100 2017 5 9
101 2017 6 11
102 2017 7 13
103 2017 8 15
实际输出(不需要)
df["delta_A"] = df["A"].diff()
df
A B delta_A
ID year
100 2016 1 2 NaN
101 2016 2 4 1.0
102 2016 3 6 1.0
103 2016 4 8 1.0
100 2017 5 9 1.0
101 2017 6 11 1.0
102 2017 7 13 1.0
103 2017 8 15 1.0
这是针对ID维度而不是年份维度的第一个差分.我希望它与我上面期望的输出中的年份维度有第一个差分.
另一种方法是创建"a"的滞后版本,然后将其从"a"中减go ,但我不知道如何在多索引中做到这一点.
谢谢