gpt4 book ai didi

python - 选择两个数据框列之一作为新列的输入

转载 作者:行者123 更新时间:2023-12-01 08:50:37 27 4
gpt4 key购买 nike

我有一个数据框(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 的新列,该列根据以下内容从 DATENEW_DATE 列中选择日期:

如果FLAG = 1,则如果NEW_DATE是有效日期,则选择NEW_DATE,否则选择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

我正在尝试使用以下方法来实现此目的:

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

我哪里出错了?

最佳答案

几乎就到了。使用 -

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()

但是,您使用 fillna() 的方式需要将一些东西返回到 np.where 。指定inplace=True返回None但修改了df直接。

在这种情况下,很明显您需要为np.where()返回一些东西。参数,因此删除 inplace=True (默认为 inplace=False )可以满足您的需求。

关于python - 选择两个数据框列之一作为新列的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53148974/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com