Python 昼夜分类

Python 昼夜分类,python,pandas,dataframe,Python,Pandas,Dataframe,我已经尝试了许多命令来正确地获取我在字典中定义的昼夜时间。但是,它部分工作,并返回其他意外结果 我有以下数据帧和命令 import pandas as pd import numpy as np data = pd.DataFrame({ 'ID': [1, 1, 1, 1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 8, 9, 10], 'date': ['2010-01-01 12:01:00', '2010-01-01 01:27:33', '2010-04-02 12:0

我已经尝试了许多命令来正确地获取我在字典中定义的昼夜时间。但是,它部分工作,并返回其他意外结果

我有以下数据帧和命令

import pandas as pd
import numpy as np

data = pd.DataFrame({
'ID': [1, 1, 1, 1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 8, 9, 10],
'date': ['2010-01-01 12:01:00', '2010-01-01 01:27:33', 
'2010-04-02 12:01:00', '2010-04-01 07:24:00', '2011-01-01 00:01:00', 
'2011-01-01 01:27:33', '2013-01-01 12:51:00', '2014-01-01 00:30:00', 
'2014-01-01 13:27:33', '2015-01-01 15:27:33', '2016-01-01 14:32:04', 
'2011-01-01 21:28:00', '2015-01-01 22:27:33', '2015-01-01 15:45:00', '2015-01-01 23:27:43', 
              '2015-01-01 23:57:53']})
data = pd.DataFrame(data)

data['date'] = pd.to_datetime(data['date'], errors='coerce')
data['time'] = data['date'].dt.strftime('%H:%M:%S')
data['time'] = pd.to_datetime(data['time'], errors='coerce')
data['time'] = data['time'].dt.time

day = {'d': "'5:30:00'", 'n': "'21:30:00'"}
druing_day = {'morning': '4:30:00', 'afternoon': '11:00:00', 'evening': '16:30','night_time': '21:00:00'}
night = day['n']
day = day['d']
data['d-n'] = data['time'].apply(lambda x: 'day' if x.strftime('%H:%M:%S')<night else 'night')
                                 
morning = druing_day['morning'] # I tried to avoid using these parameters and to pass #druing_day['morning'] directly inside lampda function but it does not recognize it
afternoon = druing_day['afternoon']
evening = druing_day['evening']
night = druing_day['night_time']

data['d_time'] = data['time'].apply(lambda x:'morning' if x.strftime('%H:%M')<afternoon else
                                        'afternoon' if x.strftime('%H:%M')<evening else 'evening' 
                                        if x.strftime('%H:%M')<night else 'night')


data

将熊猫作为pd导入
将numpy作为np导入
data=pd.DataFrame({
“ID”:[1,1,1,2,2,3,4,4,5,6,6,7,8,9,10],
“日期”:[“2010-01-01 12:01:00”,“2010-01-01 01:27:33”,
'2010-04-02 12:01:00', '2010-04-01 07:24:00', '2011-01-01 00:01:00', 
'2011-01-01 01:27:33', '2013-01-01 12:51:00', '2014-01-01 00:30:00', 
'2014-01-01 13:27:33', '2015-01-01 15:27:33', '2016-01-01 14:32:04', 
'2011-01-01 21:28:00', '2015-01-01 22:27:33', '2015-01-01 15:45:00', '2015-01-01 23:27:43', 
'2015-01-01 23:57:53']})
数据=pd.DataFrame(数据)
data['date']=pd.to_datetime(data['date'],errors='PRIVE')
数据['time']=数据['date'].dt.strftime(“%H:%M:%S”)
data['time']=pd.to_datetime(data['time'],errors='PRIVE')
数据['time']=数据['time'].dt.time
day={'d':“'5:30:00'”,'n':“'21:30:00'”
druing_day={‘上午’:‘4:30:00’、‘下午’:‘11:00:00’、‘晚上’:‘16:30’、‘晚上’:‘21:00:00’}
夜晚=白天
天=天

data['d-n']=data['time'].apply(lambda x:'day'if x.strftime(“%H:%M:%S”)您可以使用
.indexer\u between\u time
来检查数据帧的索引是否在某个时间段之间。您只需要一个
日期
列,因此,如果您不需要它做任何其他用途,则无需单独的
时间

# Set day & nighttime based your specified time frames
data.loc[data.set_index('date').index.indexer_between_time('21:30', '5:30'), 'd-n'] = 'night'
data.loc[data.set_index('date').index.indexer_between_time('5:30', '21:30'), 'd-n'] = 'day'
结果

    ID  date                    time        d-n     d_time
0   1   2010-01-01 12:01:00     12:01:00    day     afternoon
1   1   2010-01-01 01:27:33     01:27:33    night   night
2   1   2010-04-02 12:01:00     12:01:00    day     afternoon
3   1   2010-04-01 07:24:00     07:24:00    day     morning
4   2   2011-01-01 00:01:00     00:01:00    night   night
5   2   2011-01-01 01:27:33     01:27:33    night   night
6   3   2013-01-01 12:51:00     12:51:00    day     afternoon
7   4   2014-01-01 00:30:00     00:30:00    night   night
8   4   2014-01-01 13:27:33     13:27:33    day     afternoon
9   5   2015-01-01 15:27:33     15:27:33    day     afternoon
10  6   2016-01-01 14:32:04     14:32:04    day     afternoon
11  6   2011-01-01 21:28:00     21:28:00    day     night
12  7   2015-01-01 22:27:33     22:27:33    night   night
13  8   2015-01-01 15:45:00     15:45:00    day     afternoon
14  9   2015-01-01 23:27:43     23:27:43    night   night
15  10  2015-01-01 23:57:53     23:57:53    night   night

请看一下
pd.cut
。在这种情况下,您能提供一个如何使用
pd.cut
的示例吗?
    ID  date                    time        d-n     d_time
0   1   2010-01-01 12:01:00     12:01:00    day     afternoon
1   1   2010-01-01 01:27:33     01:27:33    night   night
2   1   2010-04-02 12:01:00     12:01:00    day     afternoon
3   1   2010-04-01 07:24:00     07:24:00    day     morning
4   2   2011-01-01 00:01:00     00:01:00    night   night
5   2   2011-01-01 01:27:33     01:27:33    night   night
6   3   2013-01-01 12:51:00     12:51:00    day     afternoon
7   4   2014-01-01 00:30:00     00:30:00    night   night
8   4   2014-01-01 13:27:33     13:27:33    day     afternoon
9   5   2015-01-01 15:27:33     15:27:33    day     afternoon
10  6   2016-01-01 14:32:04     14:32:04    day     afternoon
11  6   2011-01-01 21:28:00     21:28:00    day     night
12  7   2015-01-01 22:27:33     22:27:33    night   night
13  8   2015-01-01 15:45:00     15:45:00    day     afternoon
14  9   2015-01-01 23:27:43     23:27:43    night   night
15  10  2015-01-01 23:57:53     23:57:53    night   night