我有一个数据框
,其中包含有关某些产品(单位)的销售信息:
unit year month price
0 1 2018 6 100
1 1 2013 4 70
2 2 2015 10 80
3 2 2015 2 110
4 3 2017 4 120
5 3 2002 6 90
6 4 2016 1 55
并且我想为每次销售添加包含有关先前销售的信息的列,如果没有先前的销售,则添加 NaN。
unit year month price prev_price prev_year prev_month
0 1 2018 6 100 70.0 2013.0 4.0
1 1 2013 4 70 NaN NaN NaN
2 2 2015 10 80 110.0 2015.0 2.0
3 2 2015 2 110 NaN NaN NaN
4 3 2017 4 120 90.0 2002.0 6.0
5 3 2002 6 90 NaN NaN NaN
6 4 2016 1 55 NaN NaN NaN
目前,我正在对单元进行一些分组
,保留具有多行的单元,然后提取与最小日期关联的这些单元的信息。然后将此表与我的原始表连接起来,仅保留已合并的两个表中具有不同日期的行。
我觉得有一个很简单的方法可以做到这一点,但我不确定如何做。
最佳答案
使用DataFrameGroupBy.shift
与 add_prefix
和 join
将新的 DataFrame
附加到原始数据:
#if real data are not sorted
#df = df.sort_values(['unit','year','month'], ascending=[True, False, False])
df = df.join(df.groupby('unit', sort=False).shift(-1).add_prefix('prev_'))
print (df)
unit year month price prev_year prev_month prev_price
0 1 2018 6 100 2013.0 4.0 70.0
1 1 2013 4 70 NaN NaN NaN
2 2 2015 10 80 2015.0 2.0 110.0
3 2 2015 2 110 NaN NaN NaN
4 3 2017 4 120 2002.0 6.0 90.0
5 3 2002 6 90 NaN NaN NaN
6 4 2016 1 55 NaN NaN NaN
关于python - 根据具有条件的其他列的值在 pandas 中添加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54481068/