【发布时间】:2021-09-22 09:33:33
【问题描述】:
我有一个如下所示的数据框。这是post的延续@
df = pd.DataFrame({'person_id': [101,101,101,101,202,202,202],
'person_type':['A','A','B','C','D','B','A'],
'login_date':['5/7/2013 09:27:00 AM','09/08/2013 11:21:00 AM','06/06/2014 08:00:00 AM','06/06/2014 05:00:00 AM','12/11/2011 10:00:00 AM','13/10/2012 12:00:00 AM','13/12/2012 11:45:00 AM'],
'logout_date':[np.nan,'11/08/2013 11:21:00 AM',np.nan,'06/06/2014 05:00:00 AM',np.nan,'13/10/2012 12:00:00 AM',np.nan]})
df.login_date = pd.to_datetime(df.login_date)
df.logout_date = pd.to_datetime(df.logout_date)
我想对 logout_date 列应用 2 条规则
规则 1 - 如果人员类型为 B、C、D、E 且 logout_date 为 NaN,则复制登录日期值
规则 2 - 如果人员类型为 A 且 logout_date 为 NaN,则将登录日期添加 2 天
当我尝试以下方法时
m1 = df['person_type'].isin(['B','C','D'])
m2 = df['person_type'].isin(['A'])
m3 = df['logout_datetime'].isna()
df['logout_datetime'] = np.select([m1 & m3, m2 & m3],
[df['login_datetime'], df['login_datetime'] + pd.DateOffset(days=2)],
default=df['logout_datetime'])
df['logout_date'] = np.select([m1 & m3, m2 & m3],
[df['login_datetime'].dt.date, (df['login_datetime'] + pd.DateOffset(days=2)).dt.date],
default=df['logout_datetime'])
我想使用np.select 直接获取logout_date 列,如示例代码所示。
目前我得到的输出如下所示是不正确的
我不明白为什么有些行会导致问题,而其他行工作正常。
可以帮我解决这个问题吗?我希望我的输出具有正确的日期值
【问题讨论】:
-
可以,注销数据可以有
na
标签: python pandas dataframe datetime pandas-groupby