我有这个示例数据框:
df = pd.DataFrame({
'year': [1987, 1987, 1988, 1988, 1989, 1989],
'product':['p1', 'p2', 'p1', 'p2', 'p1', 'p2'],
'price': [25, 30, 28, 29, 27, 30],
})
提取特定年份产品价格高于(或低于)上一年值(value)的行的最佳方法是什么?例如,1988 年 p1 的价格高于 1987 年。 我的真实数据分布了很多年,一些新产品在某些年份进入市场,而其他一些产品可能会停产。
最佳答案
您可以使用pandas.DataFrame.groupby
与 pandas.DataFrame.shift
结合像这样:
>>> df = df.sort_values(by=['product', 'year'])
>>> df[df.price > df.groupby('product').price.shift()]
year product price
2 1988 p1 28
5 1989 p2 30
基本上,您可以按产品对数据进行分组,并通过 shift()
方法找出之前的值。为了确保您查看的是上一年的值,我建议首先对数据框中的值进行排序。
关于python - Pandas DataFrame 跨行条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68140859/