我有一个看起来像这样的数据框:
DATE FOLIO_ID LAT ... DIA HORA CIUDAD_APROXIMADA
0 11/01/2018 D00001 22.768507 ... 4 15 SAN NICOLAS DE LOS GARZA
1 26/02/2018 D00009 25.708889 ... 1 2 SAN NICOLAS DE LOS GARZA
2 01/01/2018 D00014 25.647176 ... 1 4 GUADALUPE
3 01/01/2018 D00017 25.714607 ... 1 5 SAN NICOLAS DE LOS GARZA
4 01/01/2018 D00018 25.492993 ... 1 9 SANTIAGO
我想创建一个名为PERIODO_DIA
的新列,它基于HORA
进行填充。
import numpy as np
import pandas as pd
for i in df["HORA"]:
if 6< i < 11:
df["PERIODO_DIA"] = 1
elif 12 < i < 20:
df["PERIODO_DIA"] = 2
elif 21 < i < 24:
df["PERIODO_DIA"] = 3
else:
df["PERIODO_DIA"] = 4
因此,代码将遍历数据帧的每一行,以检查HORA中的每个值,并根据该值为PERIODO_DIA分配一个值。
到目前为止,我已经尝试了不同的循环,但是我无法弄清楚逻辑
答案 0 :(得分:3)
由于您的期间不是连续的(例如,您跳过一天中的某些小时并将它们全部归为4
),因此您无法使用pd.cut。但是您可以通过一个简单的循环来解决这个问题
df['PERIODO_DIA'] = 4
for i, (start, end) in enumerate([(6, 11), (12, 20), (21,24)]):
df.loc[df.HORA.gt(start) & df.HORA.lt(end), 'PERIODO_DIA'] = i+1
或者创建一个字典,将所有24小时作为键,将句点作为值(mapper = {0: 4, 1: 4, ..., 7: 1, ..., 23: 4}
),然后使用df.map
df['PERIODO_DIA'] = df.HORA.map(mapper)