gpt4 book ai didi

python - Bin 时间戳到自定义时间段

转载 作者:太空宇宙 更新时间:2023-11-04 03:40:33 24 4
gpt4 key购买 nike

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

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

我想创建一个 df['Periods'] 列,其中包含自定义期间名称。例如,Period1 如果时间戳在 01-01 00:0001-02 00:00 之间,则 Period2 否则。

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

你会怎么做?

谢谢。

最佳答案

在您的 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]}

方法 1。

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

对比第二:

100 loops, best of 3: 3.31 ms per loop

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

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')     

关于python - Bin 时间戳到自定义时间段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26659637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com