这是我的问题:我有一个由三列组成的DataFrame esp(大约500万行),开始日期时间,结束日期时间和类别
DHE DHS CAT
0 2017-01-08 13:28:20 2017-01-08 13:43:13 43
1 2017-01-08 13:43:50 2017-01-08 13:45:39 43
2 2017-01-08 13:43:57 2017-01-08 13:46:18 43
3 2017-01-08 13:44:03 2017-01-08 13:46:32 43
4 2017-01-08 13:44:24 2017-01-08 13:53:29 43
DHE datetime64[ns]
DHS datetime64[ns]
CAT int64
dtype: object
我有第二个DataFrame ts(大约一百万行),由一分钟的时隙和每个类别的一列组成
ts = pd.DataFrame(data={str(i): 0 for i in np.sort(esp['CAT'].unique())},
index = pd.date_range(min(min(esp['DHE']), min(esp['DHS'])),
(max(max(esp['DHE']), max(esp['DHS'])) + pd.Timedelta(days=1)),
freq='min',
normalize=True))
41 42 43 45 46 47 48 50 52 53 54 55
2016-01-10 00:00:00 0 0 0 0 0 0 0 0 0 0 0 0
2016-01-10 00:01:00 0 0 0 0 0 0 0 0 0 0 0 0
2016-01-10 00:02:00 0 0 0 0 0 0 0 0 0 0 0 0
2016-01-10 00:03:00 0 0 0 0 0 0 0 0 0 0 0 0
2016-01-10 00:04:00 0 0 0 0 0 0 0 0 0 0 0 0
dtype('<M8[ns]')
41 int64
42 int64
43 int64
45 int64
46 int64
47 int64
48 int64
50 int64
52 int64
53 int64
54 int64
55 int64
dtype: object
我想在第二个DataFrame ts中对所有时隙进行计数,按已开始但尚未结束的esp事件数量进行分类。
因此,我正在做的是这样:
for index, row in esp.iterrows():
ts.loc[row['DHE'].floor('min'):row['DHS'].ceil('min'), str(row['CAT'])] += 1
但是,它很长,因为我还没有找到绕过for循环使用的解决方案。 您能帮我找到一种获得想要的结果的方法吗(例如使用numpy的矢量化功能?)?