Python 如果单独的每小时datetime列位于指定的每小时范围之间,则创建新的对象列值
我有一个列“飞行时间”,显示飞行的小时和分钟(%H:%M格式,例如02:22,timedelta64[ns]),我想创建一个新列(df['val']),将飞行时间分类为“0-2小时”、“2-4小时”、“4-6小时”或“6小时以上”,以便我可以绘制这4个新变量的总和 有人能告诉我如何设置下面的if语句来创建可以对4个子集进行分类的“val”列吗?飞行时间列是timedelta64[ns]对象Python 如果单独的每小时datetime列位于指定的每小时范围之间,则创建新的对象列值,python,pandas,Python,Pandas,我有一个列“飞行时间”,显示飞行的小时和分钟(%H:%M格式,例如02:22,timedelta64[ns]),我想创建一个新列(df['val']),将飞行时间分类为“0-2小时”、“2-4小时”、“4-6小时”或“6小时以上”,以便我可以绘制这4个新变量的总和 有人能告诉我如何设置下面的if语句来创建可以对4个子集进行分类的“val”列吗?飞行时间列是timedelta64[ns]对象 if df['Flight_Time'] >= '0:00' & df['Flight_Ti
if df['Flight_Time'] >= '0:00' & df['Flight_Time'] < '02:00':
df['val'] = '0-2 hrs'
elif df['Flight_Time'] >= '2:00' & df['Flight_Time'] < '04:00':
df['val'] = '2-4 hrs'
elif df['Flight_Time'] >= '4:00' & df['Flight_Time'] < '06:00':
df['val'] = '4-6 hrs'
else:
df['val'] = '6+ hrs'
更新:
我已将代码更改为以下内容,但现在我在新创建的“Val”列中只获得了6个多小时的时间
from datetime import timedelta
for x in df["Flight_Time"]:
if timedelta(hours = 0, minutes = 0) < x <= timedelta(hours = 2, minutes = 0):
df['val'] = '0-2 hrs'
elif timedelta(hours = 2, minutes = 0) < x <= timedelta(hours = 4, minutes = 0):
df['val'] = '2-4 hrs'
elif timedelta(hours = 4, minutes = 0) < x <= timedelta(hours = 6, minutes = 0):
df['val'] = '4-6 hrs'
else:
df['val'] = '6+ hrs'
从日期时间导入时间增量
对于df中的x[“飞行时间”]:
如果timedelta(小时=0,分钟=0)
df["val"] = pd.cut(df["Flight_Time"], bins=[2,4,6,8,10,12])
--编辑:具有timedelta类型的版本
import pandas as pd
from datetime import timedelta
df = pd.DataFrame([
[0.5],
[3],
[5],
[10]
], columns=["flight_time"])
df["flight_time"] = pd.to_timedelta(df["flight_time"], unit="hours")
df["flight_interval"] = None
df.loc[df["flight_time"] < timedelta(hours=2), ["flight_interval"]] = "0-2 hrs"
df.loc[(df["flight_time"] > timedelta(hours=2)) & (df["flight_time"] < timedelta(hours=4)), ["flight_interval"]] = "2-4 hrs"
df.loc[(df["flight_time"] > timedelta(hours=4)) & (df["flight_time"] < timedelta(hours=6)), ["flight_interval"]] = "4-6 hrs"
df.loc[(df["flight_time"] > timedelta(hours=6)), ["flight_interval"]] = "6+ hrs"
感谢您的反馈,但我得到以下值错误:箱子必须是timedelta64 dtypeHi pguardati。感谢您的反馈,但我仍然有一些小问题。我修改了我的代码到上面的编辑,但仍然有一个小错误伟大的你做了,否则你可以找到修改版本与日期时间在编辑!
"""it's a bit redundant as implementation
however it shows how to handle
rows and columns with pandas the way you want
- just add the comparison using datetime types
(because here I used integers)
"""
import pandas as pd
df = pd.DataFrame([
[0.5],
[3],
[5],
[10]
], columns=["flight_time"])
df["flight_interval"] = None
df.loc[df["flight_time"] < 2, ["flight_interval"]] = "0-2 hrs"
df.loc[(df["flight_time"] > 2) & (df["flight_time"] < 4), ["flight_interval"]] = "2-4 hrs"
df.loc[(df["flight_time"] > 4) & (df["flight_time"] < 6), ["flight_interval"]] = "4-6 hrs"
df.loc[(df["flight_time"] > 6) , ["flight_interval"]] = "6+ hrs"
print(df)
+----+---------------+-------------------+
| | flight_time | flight_interval |
|----+---------------+-------------------|
| 0 | 0.5 | 0-2 hrs |
| 1 | 3 | 2-4 hrs |
| 2 | 5 | 4-6 hrs |
| 3 | 10 | 6+ hrs |
+----+---------------+-------------------+
import pandas as pd
from datetime import timedelta
df = pd.DataFrame([
[0.5],
[3],
[5],
[10]
], columns=["flight_time"])
df["flight_time"] = pd.to_timedelta(df["flight_time"], unit="hours")
df["flight_interval"] = None
df.loc[df["flight_time"] < timedelta(hours=2), ["flight_interval"]] = "0-2 hrs"
df.loc[(df["flight_time"] > timedelta(hours=2)) & (df["flight_time"] < timedelta(hours=4)), ["flight_interval"]] = "2-4 hrs"
df.loc[(df["flight_time"] > timedelta(hours=4)) & (df["flight_time"] < timedelta(hours=6)), ["flight_interval"]] = "4-6 hrs"
df.loc[(df["flight_time"] > timedelta(hours=6)), ["flight_interval"]] = "6+ hrs"
+----+-----------------+-------------------+
| | flight_time | flight_interval |
|----+-----------------+-------------------|
| 0 | 0 days 00:30:00 | 0-2 hrs |
| 1 | 0 days 03:00:00 | 2-4 hrs |
| 2 | 0 days 05:00:00 | 4-6 hrs |
| 3 | 0 days 10:00:00 | 6+ hrs |
+----+-----------------+-------------------+