我有一个这种格式的表:
import subprocess
params = ['param1', 'param2'] # POWERSHELL SCRIPT PARAMETERS ( optional )
script_path = "C:\\PowershellScripts\\test.PS1" # POWERSHELL SCRIPT PATH
commandline_options = ["Powershell.exe", '-ExecutionPolicy', 'Unrestricted', script_path] # INITIALIZING COMMAND
for param in params: # FOREACH LOOP OF PARAMETERS
commandline_options.append(param) # ADDING SCRIPT PARAMETERS TO THE COMMAND
result = subprocess.run(commandline_options, stdout = subprocess.PIPE, stderr = subprocess.PIPE, universal_newlines = True) # RUN THE SCRIPT USING SUBPROCESS WITH PARAMS
print(result.returncode) # PRINT THE RETURN CODE FROM POWERSHELL SCRIPT
print(result.stdout) # PRINT THE STANDARD OUTPUT FROM POWERSHELL SCRIPT
print(result.stderr) # PRINT THE STANDARD ERROR FROM POWERSHELL SCRIPT
我想做的是计算表中的天数(从1开始),而不是从午夜开始,我希望我的日子从10:00:00开始 >。因此,对于上表,结果将是:
date
0 2017-03-30 09:59:00
1 2017-03-30 09:59:30
2 2017-03-30 10:00:00
3 2017-03-30 10:00:30
4 2017-03-30 10:01:00
5 2017-03-30 10:01:30
6 2017-03-30 10:02:00
到目前为止,我设法用以下代码生成了新列:
date day
0 2017-03-30 09:59:00 0
1 2017-03-30 09:59:30 0
2 2017-03-30 10:00:00 1
3 2017-03-30 10:00:30 1
4 2017-03-30 10:01:00 1
5 2017-03-30 10:01:30 1
6 2017-03-30 10:02:00 1
但是我希望有一种更优雅(更重要的是,更快)的方式来执行此操作。
有什么建议吗?
答案 0 :(得分:3)
如果将数据后退10小时,然后按天对行进行分组怎么办?然后,您可以在日期上使用pd.factorize
,这应该很快。
df['day'] = pd.factorize((df['date'] - pd.Timedelta(hours=10)).dt.date)[0]
df
date day
0 2017-03-30 09:59:00 0
1 2017-03-30 09:59:30 0
2 2017-03-30 10:00:00 1
3 2017-03-30 10:00:30 1
4 2017-03-30 10:01:00 1
5 2017-03-30 10:01:30 1
6 2017-03-30 10:02:00 1
GroupBy.ngroup
是另一种选择:
df['day'] = df.groupby((df['date'] - pd.Timedelta(hours=10)).dt.date).ngroup()
df
date day
0 2017-03-30 09:59:00 0
1 2017-03-30 09:59:30 0
2 2017-03-30 10:00:00 1
3 2017-03-30 10:00:30 1
4 2017-03-30 10:01:00 1
5 2017-03-30 10:01:30 1
6 2017-03-30 10:02:00 1