代码之家  ›  专栏  ›  技术社区  ›  Stacey

选择两个dataframe列中的一个作为新列的输入

  •  1
  • Stacey  · 技术社区  · 6 年前

    我有一个数据框( df )头部看起来像:

                 DATE   BBG  FLAG  DATE_DIFF   NEW_DATE    
    0      2014-03-04  1333     1      -31.0 2014-04-03 
    1      2014-04-04  1333     0      -91.0 2014-04-04 
    2      2014-07-04  1333     1      -31.0 2014-04-07 
    3      2014-08-04  1333     1      -31.0 2014-04-08 
    4      2014-09-04  1333     1      -30.0 2014-04-09 
    5      2014-10-04  1333     1      -31.0 2014-04-10 
    6      2014-11-04  1333     1      204.0 2014-04-11
    7      2014-04-14  1333     0       -1.0 2014-04-14 
    8      2014-04-15  1333     0       -1.0 2014-04-15 
    9      2014-04-16  1333     0       -1.0 2014-04-16 
    

    我正在尝试创建一个名为 PICKED ,从 DATE NEW_DATE 列基于以下内容:

    FLAG = 1 那么如果 新建\u日期 新建\u日期 否则选择日期。

    预期输出如下所示:

                 DATE   BBG   FLAG  DATE_DIFF   NEW_DATE     PICKED
    0      2014-03-04  1333      1      -31.0 2014-04-03 2014-04-03
    1      2014-04-04  1333      0      -91.0 2014-04-04 2014-04-04
    2      2014-07-04  1333      1      -31.0 2014-04-07 2014-04-07
    3      2014-08-04  1333      1      -31.0 2014-04-08 2014-04-08
    4      2014-09-04  1333      1      -30.0 2014-04-09 2014-04-09
    5      2014-10-04  1333      1      -31.0 2014-04-10 2014-04-10
    6      2014-11-04  1333      1      204.0 2014-04-11 2014-04-11
    7      2014-04-14  1333      0       -1.0 2014-04-14 2014-04-14
    8      2014-04-15  1333      0       -1.0 2014-04-15 2014-04-15
    9      2014-04-16  1333      0       -1.0 2014-04-16 2014-04-16
    

    我试图用以下方法来实现这一点:

    df['PICKED'] = np.where(df['FLAG'] == 1, df.NEW_DATE.fillna(df.DATE, inplace=True), df['DATE'])
    

                 DATE   BBG   FLAG  DATE_DIFF   NEW_DATE     PICKED
    0      2014-03-04  1333      1      -31.0 2014-04-03        NaT
    1      2014-04-04  1333      0      -91.0 2014-04-04 2014-04-04
    2      2014-07-04  1333      1      -31.0 2014-04-07        NaT
    3      2014-08-04  1333      1      -31.0 2014-04-08        NaT
    4      2014-09-04  1333      1      -30.0 2014-04-09        NaT
    5      2014-10-04  1333      1      -31.0 2014-04-10        NaT
    6      2014-11-04  1333      1      204.0 2014-04-11        NaT
    7      2014-04-14  1333      0       -1.0 2014-04-14 2014-04-14
    8      2014-04-15  1333      0       -1.0 2014-04-15 2014-04-15
    9      2014-04-16  1333      0       -1.0 2014-04-16 2014-04-16
    

    我哪里出错了?

    1 回复  |  直到 4 年前
        1
  •  1
  •   Vivek Kalyanarangan    6 年前

    你是 几乎 那里使用-

    df['PICKED'] = np.where(df['FLAG'] == 1, df.NEW_DATE.fillna(df.DATE), df['DATE'])
    

    输出

        DATE    BBG FLAG    DATE_DIFF   NEW_DATE    PICKED
    0   2014-03-04  1333    1   -31.0   2014-04-03  2014-04-03
    1   2014-04-04  1333    0   -91.0   2014-04-04  2014-04-04
    2   2014-07-04  1333    1   -31.0   2014-04-07  2014-04-07
    3   2014-08-04  1333    1   -31.0   2014-04-08  2014-04-08
    4   2014-09-04  1333    1   -30.0   2014-04-09  2014-04-09
    5   2014-10-04  1333    1   -31.0   2014-04-10  2014-04-10
    6   2014-11-04  1333    1   204.0   2014-04-11  2014-04-11
    7   2014-04-14  1333    0   -1.0    2014-04-14  2014-04-14
    8   2014-04-15  1333    0   -1.0    2014-04-15  2014-04-15
    9   2014-04-16  1333    0   -1.0    2014-04-16  2014-04-16
    

    使用 inplace df 直接。如果你使用 fillna() df.NEW_DATE 直接在 np.where()

    需要把东西还给警察 np.where inplace=True 退货 None 但是修改了 测向 直接。

    np.where() 参数,从而删除 原地=真 inplace=False )得到你需要的。