根据Python中的条件创建一个新列

时间:2020-08-29 22:11:48

标签: python pandas numpy dataframe

我有一个看起来像这样的数据框:

         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分配一个值。

到目前为止,我已经尝试了不同的循环,但是我无法弄清楚逻辑

1 个答案:

答案 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)