Python 3.x 从Datetime字段中形成一列
下面是DataFrame列及其数据类型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
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 getdf1['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