python - 根据具有条件的其他列的值在 pandas 中添加列

标签 python pandas

我有一个数据框,其中包含有关某些产品(单位)的销售信息:

    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.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

关于python - 根据具有条件的其他列的值在 pandas 中添加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54481068/

相关文章:

python - 如何根据另一个 DataFrame 的条件创建新的 DataFrame

python - 随机行走 Pandas

python - 连续中断时如何重置序列

python numpy 获取屏蔽数据而不压平

python - 省略 matplotlib 图中的连接线,例如y = tan(x)

python - 按列标题排列 DataFrame 列

python-3.x - 加速 Pandas 迭代

python - 如何将 sale.order.line 中的数据移动到交货订单 (stock.pack.operation)

python - 计算多个 xarray 变量的平均值

python - 我提取总计的功能正在耗尽我的输入文件以供将来阅读