【问题标题】:create new column with values from another column based on condition根据条件使用另一列的值创建新列
【发布时间】:2022-01-07 19:40:12
【问题描述】:

我有一个数据框

A   B   Value   FY
1   5    a     2020
2   6    b     2020
3   7    c     2021
4   8    d     2021

我想创建一个“prev_FY”列,它查看“value”列和上一年,并填充到 FY 列的当年行中; 我想要的输出是:

A   B   Value   FY     prev_FY
1   5    a     2020    
2   6    b     2020
3   7    c     2021      a
4   8    d     2021      b

我尝试使用pivottable,但它不起作用,因为值与 FY 对应的值保持不变。 SHIFT 函数不可行,因为我有数百万行。

【问题讨论】:

    标签: python pandas dataframe conditional-statements multiple-columns


    【解决方案1】:

    用途:

    df['g'] = df.groupby('FY').cumcount()
    df2 = df[['FY','Value','g']].assign(FY = df['FY'].add(1))
    
    df = df.merge(df2, on=['FY','g'], how='left', suffixes=('','_prev')).drop('g', axis=1)
    print (df)
       A  B Value    FY Value_prev
    0  1  5     a  2020        NaN
    1  2  6     b  2020        NaN
    2  3  7     c  2021          a
    3  4  8     d  2021          b
    

    【讨论】:

    • 感谢您的回复,问题:您是否连接任何列?因为我收到一个错误:只能将 str(不是“int”)连接到 str
    • @rohitD - 不,没有concatenating,不理解错误。
    • @rohitD - 代码的哪一部分返回错误?
    • 第二行即df2 = df[['FY','Value','g']].assign(FY = df['FY'].add(1))
    • 是的,它有效,非常感谢!
    猜你喜欢
    • 2016-10-07
    • 1970-01-01
    • 2021-12-02
    • 2022-12-16
    • 2023-03-25
    • 2021-10-02
    • 2018-03-06
    • 2021-03-02
    • 1970-01-01
    相关资源
    最近更新 更多