我正在尝试计算市场营销活动启动后经过的天数。在DataFrame中,每个市场营销活动的每个日期对应一行(df)并且所有日期都从同一天开始(虽然没有每个活动每天的数据点)。在列“B”中,我有与感兴趣的数据点相关的日期(dateime 64 [ns]),而在列“c”中,我有市场活动的启动日期(dateime 64 [ns])。当列“b”早于列“c”时,我希望结果计算返回n/a(或np.NaN或合适的替代项),否则我希望计算返回两个日期的差值。
| 活动|日期|上市日期|所需列|
| - -|- -|- -|- -|
| A级|2019年9月1日|2022年12月1日|不适用|
| A级|2019年9月2日|2022年12月1日|不适用|
| B| 2019年9月1日|2019年9月1日|第0页|
| B| 2019年9月25日|2019年9月1日|二十四|
当我尝试:
df['Days Since Launch'] = df['Date'] - df['Launch Date']
我希望返回负值的结果实际上返回了正值,因此当我的日期在发布日期之前10天和之后10天时,会导致重复的值。
当我尝试:
df['Days Since Launch'] = np.where(df['Date'] < df['Launch Date'], XXX, df['Date'] - df['Launch Date'])
其中XXX必须与两个输入列的数据类型相同,所以我不能输入np.NaN,因为计算会失败,我也不能输入日期,因为这仍然会留下我想解决的同一个问题。IF语句不起作用,因为“序列的真值是模糊的”。有什么想法吗?
3条答案
按热度按时间ghg1uchk1#
您可以使用
dt.days
直接减去并转换为天数,然后使用where
屏蔽负值:使用
mask
的替代方案与您的初始尝试更接近:输出量:
lb3vh1jj2#
添加
Series.dt.days
以将时间增量转换为天数:des4xlb03#
另一种选择: