假设我有以下数据:
d = {'origin': ['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'], 'destination': ['b', 'b', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'c', 'c', 'c'], 'year': [2000, 2001, 2002, 2003, 2004, 2005, 2000, 2001, 2002, 2003, 2004, 2005], 'value': [10, 17, 22, 7, 8, 14, 10, 2, 5, 7, 78, 23] }
data_frame = pd.DataFrame(data=d)
data_frame.set_index(['origin', 'destination'], inplace=True)
data_frame
我想要实现的是以下内容:我想要计算两种情况下每个起点-目的地对(作为索引给出)相对于列value
的时间差。
在第一种情况下,我希望以2000年为基数,这样,相应的值将从以后年份(包括2000年)的值中减去,一旦年份到达2003年,则基数年将变为2003年,并继续减去。
如果有一点不清楚,下面是我想要实现的最终数据集
d = {'origin': ['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'], 'destination': ['b', 'b', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'c', 'c', 'c'], 'year': [2000, 2001, 2002, 2003, 2004, 2005, 2000, 2001, 2002, 2003, 2004, 2005], 'value': [10, 17, 22, 7, 8, 14, 10, 2, 5, 7, 78, 23], 'diff': [0, 7, 12, 0, 1, 7, 0, -8, -5, 0, 71, 16], }
data_frame = pd.DataFrame(data=d)
data_frame.set_index(['origin', 'destination'], inplace=True)
data_frame
对于每一个始发地-目的地对,以2000年为基准年计算差值,然后切换到2003年。
谢谢你的帮忙
2条答案
按热度按时间xkrw2x1b1#
如果没有匹配的
2000,2003
,您可以通过将value
替换为缺失值来创建Series
用于减法,然后向前填充每组的NaN
:wj8zmpe12#