Python 数据帧无法识别多个if语句
我有一个如下所示的数据框,小时列是一系列整数:Python 数据帧无法识别多个if语句,python,pandas,numpy,indexing,Python,Pandas,Numpy,Indexing,我有一个如下所示的数据框,小时列是一系列整数: |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 | |Hour| TimeofDay | 0|23 | Morning | 1|14
|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 |
|Hour| TimeofDay |
0|23 | Morning |
1|14 | Morning |
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"
我的if语句没有正确读取我的条件,这有什么原因吗?我认为您使用了不同的列来写一天中的时间
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'
对于索引,df.iterrows()中的行:
如果第[“小时”]>16行:
df['TimeofDay']=“深夜”#这里是'TimeofDay'
elif np.logical_and(row[“Hour”]>8,row[“Hour”]我发现在if语句中使用pandas的.loc函数更容易,对于您想要的输出,代码如下所示:
df['TimeofDay'] = "Morning"
df.loc[(df["Hour"] > 8) & (df["Hour"] <= 16), 'TimeofDay'] = "Late Evening"
df.loc[df['Hour'] > 16, 'TimeofDay'] = "Late Evening"
df['TimeofDay']=“早晨”
df.loc[(df[“Hour”]>8)和(df[“Hour”]16,“一天的时间”]=“深夜”
从你的另一个语句开始,然后应用任何改变该列的条件。
你也可以考虑使用NUMPY SELECT:
conditions = [df['Hour'] > 16, df['Hour'] > 8, df['Hour'] <= 8]
choices = ['Late Evening', 'Mid Day', 'Morning']
df['TimeofDay'] = np.select(conditions, choices)
conditions=[df['Hour']>16,df['Hour']>8,df['Hour']对于初学者来说,不需要为此迭代数据帧。广播将更清晰、更高效。numpy.where
可能会有所帮助,但第一条语句可以在本地完成。不需要迭代。它既混乱又低效。也许可以改为使用广播。