首页 > 解决方案 > Pandas 数据框无法识别多个 if 语句

问题描述

我有一个如下所示的数据框,其中 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 语句没有正确读取我的条件是否有原因?

标签: pythonpandasnumpyindexing

解决方案


我发现将 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 语句开始,然后应用任何会更改该列的条件。


推荐阅读