我有像这样的pandas数据框
Years {2000, ..., 2001, ..., 2002, ...}
product {'A', 'B', 'C', 'D', ...}
price $ {10, 11, 12, 13, 14, ...}
所以,我有很多产品,多年来每种产品都有不同的价格 我想逐年计算每个产品的年度进化
我可以用for循环来做到这一点,我为每一行寻找产品而年份+ 1来获得价格,但它听起来很重,执行起来很长。
有更好的方法吗?
最好(为了以后的目的)会得到类似的东西
Years {2000, ..., 2001, ..., 2002, ...}
product {'A', 'B', 'C', 'D', ...}
price $ {10, 11, 12, 13, 14, ...}
next price $ {11, 13, 14, 12, 14, ...}
最后我知道2000年的产品A价格为10美元,下一个价格(2001年)为11美元
希望你了解我! 谢谢大家 AE答案 0 :(得分:2)
df = pd.DataFrame({'Years': [2000]*4+[2001]*2+[2000]*2+[2001]*2+[2002]*4,
'Product': [np.random.choice(['A', 'B', 'C', 'D']) for _ in range(0, 14)],
'Price': np.random.uniform(1,5, size=14)})
res = df.sort_values('Years').set_index('Years').groupby('Product').apply(lambda x: x['Price'].diff())
Product Years
A 2001 NaN
B 2001 NaN
2001 3.176459
2002 -0.743620
C 2000 NaN
2000 1.450093
2001 -0.040187
2002 -3.237749
D 2000 NaN
2000 -0.670978
2000 0.434457
2000 0.280269
2002 -0.002989
2002 2.671679