我有这样的数据
ID datetime
0 2 2015-01-09 19:05:39
1 1 2015-01-10 20:33:38
2 1 2015-01-10 21:10:00
我已将此日期时间转换为Unix时间戳
ID timestamp
0 2 1420830339
1 1 1420922018
2 1 1420924200
我想先将unix时间戳转换为EST标准,然后将每行分成10分钟的间隔。我需要一列来指示该行属于哪个bin。
我的最小日期时间是2015年1月1日00:00:00,而我只有2015年1月1日至31日的数据。
如何使用python或pandas实现此目的。
答案 0 :(得分:4)
将date_range
与cut
一起用于10分钟的装箱:
df['datetime'] = pd.to_datetime(df['datetime'])
bins = pd.date_range('2015-01-01', '2015-02-01', freq='10T')
df['bins'] = pd.cut(df['datetime'], bins)
df['lab'] = pd.cut(df['datetime'], bins, labels=False)
df['bins_left'] = pd.IntervalIndex(pd.cut(df['datetime'], bins)).left
df['bins_right'] = pd.IntervalIndex(pd.cut(df['datetime'], bins)).right
df['bins_left_unix'] = df['bins_left'].to_numpy().astype(np.int64) // 10**9
df['bins_right_unix'] = df['bins_right'].to_numpy().astype(np.int64) // 10**9
print (df)
ID datetime bins lab \
0 2 2015-01-09 19:05:39 (2015-01-09 19:00:00, 2015-01-09 19:10:00] 1266
1 1 2015-01-10 20:33:38 (2015-01-10 20:30:00, 2015-01-10 20:40:00] 1419
2 1 2015-01-10 21:10:00 (2015-01-10 21:00:00, 2015-01-10 21:10:00] 1422
bins_left bins_right bins_left_unix bins_right_unix
0 2015-01-09 19:00:00 2015-01-09 19:10:00 1420830000 1420830600
1 2015-01-10 20:30:00 2015-01-10 20:40:00 1420921800 1420922400
2 2015-01-10 21:00:00 2015-01-10 21:10:00 1420923600 1420924200