在Python中基于条件创建新列

2024-05-15 12:10:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下所示的数据帧:

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

到目前为止,我已经尝试了不同的循环,但我无法理解其中的逻辑


Tags: 数据importdfdateasdefoliosan
1条回答
网友
1楼 · 发布于 2024-05-15 12:10:18

由于您的周期不是连续的(即,您跳过一天中的一些小时并将它们全部分组在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)

相关问题 更多 >