我有一个数据帧(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
是有效日期,则选择NEW_DATE
,否则选择DATE。
预期输出如下:
NEW_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'])
请让我知道我做错了什么地方。
谢谢
答案 0 :(得分:1)
您几乎在那里。使用-
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
)即可满足您的需求。