【问题标题】:Pandas dataframe not recognizing multiple if statementsPandas 数据框无法识别多个 if 语句
【发布时间】:2021-04-29 18:05:49
【问题描述】:

我有一个如下所示的数据框,其中 Hour 列是一系列整数:

  |Hour| 
 0|23  |
 1|14  |
 2|6   |
 3|2   |

我想要的输出如下:

  |Hour| TimeofDay   |
 0|23  | Late Evening|
 1|14  | Mid Day     |
 2|6   | Morning     |
 3|2   | Morning     |

为了实现这个结果,我使用了以下代码行:

for index, row in df.iterrows():
    if row["Hour"] > 16:
        df['TimeofDay'] = "Late Evening"
    elif np.logical_and(row["Hour"] > 8 , row["Hour"] <= 16):
        df['HarshEventTime'] = "Mid Day"
    else :    
        df['HarshEventTime'] = "Morning"

不幸的是,我的输出如下:

  |Hour| TimeofDay   |
 0|23  | Morning     |
 1|14  | Morning     |
 2|6   | Morning     |
 3|2   | Morning     |

我的 if 语句没有正确读取我的条件是否有原因?

【问题讨论】:

  • 对于初学者来说,没有必要为此迭代 DataFrame。广播将更加清晰和高效。 numpy.where 可能会有所帮助,但第一个语句可以在本地完成。

标签: python pandas numpy indexing


【解决方案1】:

你也可以考虑使用numpy select:

conditions = [df['Hour'] > 16, df['Hour'] > 8, df['Hour'] <= 8]
choices = ['Late Evening', 'Mid Day', 'Morning']

df['TimeofDay'] = np.select(conditions, choices)

【讨论】:

    【解决方案2】:

    我觉得用pandas的.loc函数做if语句更方便,你想要的输出代码如下:

    df['TimeofDay'] = "Morning"
    df.loc[(df["Hour"] > 8) & (df["Hour"] <= 16), 'TimeofDay'] = "Late Evening"
    df.loc[df['Hour'] > 16, 'TimeofDay'] = "Late Evening"
    

    您从 else 语句开始,然后应用任何会更改该列的条件。

    【讨论】:

      【解决方案3】:

      我认为您正在使用不同的列来写一天中的时间,

      for index, row in df.iterrows():
          if row["Hour"] > 16:
              df['TimeofDay'] = "Late Evening" #here 'TimeofDay'
          elif np.logical_and(row["Hour"] > 8 , row["Hour"] <= 16):
              df['HarshEventTime'] = "Mid Day" #here 'HarshEventTime'
          else :    
              df['HarshEventTime'] = "Morning" #here 'HarshEventTime'
      

      尝试使用相同的。

      【讨论】:

      • 不需要迭代。这是混乱和低效的。也许调整为使用广播。
      猜你喜欢
      • 2017-09-05
      • 2020-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多