将时间戳合并到自定义时间段中

2024-04-27

我对熊猫相当陌生,并且遇到了障碍。我有一个包含时间戳的数据帧。我想在我的数据框中添加一列,其中包含自定义期间名称(字符串)。例如:

df = pd.DataFrame(pd.date_range('01-01 00:00', periods='72', freq='H'))

我想创建一个专栏df['Periods']其中将包含自定义期间名称。例如,Period1如果时间戳介于01-01 00:00 and 01-02 00:00, Period2否则。

我正在考虑使用cut但 bins 属性似乎只接受整数。

你会怎么办?

谢谢。


In your df初始化periods必须是数字而不是字符串。

我想如何处理这个问题的方法将取决于您想要有多少个周期。

至少有以下几种方法:

设置周期:

from datetime import time

morning_start = time(7)
morning_end = time(12)
evening_start = time(18)
evening_end = time(22)

periods = {'morning':[morning_start, morning_end], 'evening':[evening_start, evening_end]}

方法一。

def f(x, periods=periods):
    for k, v in periods.items():
        if x.hour >= v[0].hour and x.hour < v[1].hour:
            return k
    return 'unknown_period'

方法2。

for k, v in periods.items():
    df['periods'] = np.where(((v[0].hour <= df.t.apply(lambda x: x.hour)) & (df.t.apply(lambda x: x.hour) <= v[1].hour)), k, 'unknown_period')

通过定义的两个周期,第一种方法的工作速度更快:

1000 loops, best of 3: 658 µs per loop

vs. 2nd:

100 loops, best of 3: 3.31 ms per loop

在这两种只有两个句点的情况下,您可以将其设为单行表达式(无需循环遍历periods):

df['periods'] = np.where((morning_start.hour <= df.t.apply(lambda x: x.hour)) & (df.t.apply(lambda x: x.hour) <= morning_end.hour), 'morning', 'evening')     
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将时间戳合并到自定义时间段中 的相关文章

随机推荐