Python 3.x 从Datetime字段中形成一列

Python 3.x 从Datetime字段中形成一列,python-3.x,pandas,datetime,if-statement,Python 3.x,Pandas,Datetime,If Statement,下面是DataFrame列及其数据类型 df['Hours'].head() OutPut: 0 00:00:00 1 00:00:00 2 11:38:00 3 08:40:00 Name: Hours, dtype: timedelta64[ns] 我想有条件地从它形成另一个列,这样它看起来像 Hours Test 00:00:00 N/A 00:00:00 N/A 11:38:00 02:38:00 08:40:00 Un

下面是DataFrame列及其数据类型

df['Hours'].head()
OutPut: 

0   00:00:00
1   00:00:00
2   11:38:00
3   08:40:00
Name: Hours, dtype: timedelta64[ns]
我想有条件地从它形成另一个列,这样它看起来像

Hours        Test
00:00:00     N/A
00:00:00     N/A
11:38:00     02:38:00
08:40:00     Under Worked
在哪里,

if df['Hours'] == '00:00:00':
  df[Test] = 'N/A'
elif (df['Hours'].dt.total_seconds()//3600) < 9:
  df['Test'] = 'Under Worked' 
else:
  df['Test'] = (df['Hours'].dt.total_seconds()//3600)-9
我还尝试了使用
np。选择

conditions = [
(str(df['Hours']) == '0 days 00:00:00'),
(df['Hours'].dt.total_seconds()//3600) < 9]
choices = ['NA', 'Worked Under']
df['Test'] = np.select(conditions, choices, default=(df['Hours'].dt.total_seconds()//3600)-9)
如何解决此问题?

使用:

df1['Hours'] = pd.to_timedelta(df1['Hours'])

conditions = [df1['Hours'] == pd.Timedelta(0), df1['Hours'] < pd.Timedelta(9, unit='H')]
choices = ['N/A', 'Under Worked']

s = df1['Hours'].sub(pd.Timedelta(9, unit='h')).astype(str).str[7:15]

df1['OT'] = np.select(conditions, choices, default=s)
print (df1)
     Hours          Test            OT
0 00:00:00           N/A           N/A
1 00:00:00           N/A           N/A
2 11:38:00      02:38:00      02:38:00
3 08:40:00  Under Worked  Under Worked
df1['Hours']=pd.to_timedelta(df1['Hours'])
条件=[df1['Hours']==pd.Timedelta(0),df1['Hours']
我认为这里是最佳用法
np。选择
你能把它添加到问题中吗?@jezrael我添加了itnp。选择是个不错的选择,但这里的错误很明显。您已经设置了2个条件和3个选项。程序无法为您做出决定。@IMCoins我在粘贴How you get
df1['Test']
column?时犯了一个错误,因为
OT
列不包括分钟部分
ValueError: list of cases must be same length as list of conditions
df1['Hours'] = pd.to_timedelta(df1['Hours'])

conditions = [df1['Hours'] == pd.Timedelta(0), df1['Hours'] < pd.Timedelta(9, unit='H')]
choices = ['N/A', 'Under Worked']

s = df1['Hours'].sub(pd.Timedelta(9, unit='h')).astype(str).str[7:15]

df1['OT'] = np.select(conditions, choices, default=s)
print (df1)
     Hours          Test            OT
0 00:00:00           N/A           N/A
1 00:00:00           N/A           N/A
2 11:38:00      02:38:00      02:38:00
3 08:40:00  Under Worked  Under Worked