这是我的数据框:
ID : A, B, C, D, ...
Time: 2:44PM, 3:23AM, 5:00PM, 12:00AM, ...
我想要做的是将时间分类为以下内容:
12:00AM to 6:00AM: 0
6:00AM to 12:00PM: 1
12:00PM to 6:00PM: 2
6:00PM to 12:00AM: 3
所以输出必须是:
ID: A, B, C, D, ...
T_flag: 2, 0, 2, 3, ...
我尝试过使用pd.cut
和其他方法,但由于我是Python的初学者,我无法通过任何方法找到所需的结果。
答案 0 :(得分:1)
由于您希望根据小时来分组数据,最简单的方法是首先转换为24小时格式,然后使用pd.cut
。
df = pd.DataFrame({'ID': ['A', 'B', 'C', 'D'], 'Time': ['2:44PM', '3:23AM', '5:00PM', '12:00AM']})
df['Time'] = pd.to_datetime(df['Time'], format='%I:%M%p').dt.hour
df['T_flag'] = pd.cut(df['Time'], bins=np.array([-1,0,6,12,18,24]), labels=[3,0,1,2,3])
这将给出:
ID Time T_flag
A 14 2
B 3 0
C 17 2
D 0 3
第一个(-1,0]
bin是将12:00 AM转换为标签3所必需的。将此值转换为datetime将给出0,默认情况下会为其赋予标签0(第一个bin (-1,6]
或include_lowest=True
)。