我有一个带有日期,时间,距离列的数据框。我想每天以2小时间隔对距离列进行分组。我已经检查了堆栈溢出中提出的问题,但未提供所需的输出。
我粘贴的示例代码来自堆栈溢出,但是输出不符合要求。
uniquedate = np.unique(df2["Date"])
for i in uniquedate:
data_new1 = df2[df2['Date']==i]
data_new2 = data_new1[['Real_time', 'Distance_km']].copy()
data_new2.index = pd.to_timedelta(data_new2.index.astype(str))
data_new2 = data_new2.resample('2H').sum()
print(data_new2)
Distance_km
00:00:00.000000 276.850844
Distance_km
00:00:00.000000 193.115217
我得到了这个输出,但这不是必需的
答案 0 :(得分:1)
尝试一下:
data_new2.groupby([data_new2.index,pd.TimeGrouper(freq='2H')]).sum()
请避免从堆栈溢出中复制粘贴代码。通常,该解决方案不足以满足您的用例。而且它很懒。
编辑 将您的索引设置为日期时间或时间戳记,然后对您进行简单的重新采样就可以了。
import pandas as pd
idx = pd.date_range('2018-01-01', periods=5, freq='H')
ts = pd.Series(range(len(idx)), index=idx)
ts = ts.resample('2H').sum()
答案 1 :(得分:0)
我不确定我是否正确-主要是因为您没有发布数据示例。
但是,这是一个mcve:
# dtrg = pd.date_range('01.Jan.1999 21:17', '02.Jan.1999 04:23', freq='10min')
# df = pd.DataFrame({'distance': np.random.randint(1, 5, len(dtrg)) * 10}, index=dtrg)
# df.head()
# distance
# 1999-01-01 21:17:00 30
# 1999-01-01 21:27:00 40
# 1999-01-01 21:37:00 10
# 1999-01-01 21:47:00 30
# 1999-01-01 21:57:00 30
使用此数据,您可以按2H切片简单地对日期时间索引进行分组,并总结距离:
df.groupby(pd.Grouper(freq='2H')).sum()
distance
1999-01-01 20:00:00 140
1999-01-01 22:00:00 340
1999-01-02 00:00:00 370
1999-01-02 02:00:00 300
1999-01-02 04:00:00 40
...并且如果您的数据框没有日期时间索引,但日期和时间作为单独的字符串值,则应将它们转换为日期时间,然后将其设置为索引:
示例数据框结构:
date time distance
0 01.01.1999 09:00 10
将日期和时间列转换为日期时间索引:
df.set_index(pd.to_datetime(df.date.str.cat(df.time, sep=' '))).distance
date
1999-01-01 09:00:00 10
Name: distance, dtype: int64