根据同条件的其它列中的值在大熊猫添加列

时间:2019-02-01 14:02:06

标签: python pandas

我有一个dataframe与有关销售一些产品的信息(单元):

    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

此刻,我正在单元上执行一些grouping,保留那些具有多行的内容,然后提取与最小日期相关联的这些单元的信息。然后用我的原表保存加入此表只显示有已合并了2台在不同的日期行。 我觉得有一个更简单的方法来做到这一点,但我不知道怎么样。

1 个答案:

答案 0 :(得分:1)

使用DataFrameGroupBy.shiftadd_prefixjoin追加新的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