熊猫数据框:计算多年的变化

时间:2017-06-20 17:10:00

标签: python python-2.7 pandas numpy dataframe

我有像这样的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

1 个答案:

答案 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