Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果单独的每小时datetime列位于指定的每小时范围之间,则创建新的对象列值_Python_Pandas - Fatal编程技术网

Python 如果单独的每小时datetime列位于指定的每小时范围之间,则创建新的对象列值

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

我有一个列“飞行时间”,显示飞行的小时和分钟(%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_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            |
+----+-----------------+-------------------+