我使用 this answer 来汇总我的数据。
输入数据框(与上面的答案相同):
latitude longitude d1 d2 ar merge_time
0 15 10.0 12/1/1981 0:00 12/4/1981 3:00 2.317681391 1981-12-04 04:00:00
1 15 10.1 12/1/1981 0:00 12/1/1981 3:00 2.293604127 1981-12-01 04:00:00
2 15 10.2 12/1/1981 0:00 12/1/1981 2:00 2.264552161 1981-12-01 03:00:00
3 15 10.3 12/1/1981 0:00 12/4/1981 2:00 2.278556423 1981-12-04 03:00:00
4 15 10.1 12/1/1981 4:00 12/1/1981 22:00 2.168275766 1981-12-01 23:00:00
5 15 10.2 12/1/1981 3:00 12/1/1981 21:00 2.114636628 1981-12-01 22:00:00
6 15 10.4 12/1/1981 0:00 12/2/1981 17:00 1.384415903 1981-12-02 18:00:00
7 15 10.1 12/2/1981 8:00 12/2/1981 11:00 2.293604127 1981-12-01 12:00:00
但是,由于在较大的数据帧上使用 apply
,我遇到了巨大的性能问题。
我尝试在没有 apply
的情况下执行此操作,但到目前为止得出以下结论:
s = (df["d1"] != (df["d2"].shift() + pd.Timedelta("1H"))).cumsum()
df=(df.groupby(['latitude', 'longitude',s])
.agg(
ar=('ar', 'sum'),
d1=('d1', 'min'),
d2=('d2', 'max')
)
).reset_index(level=-1, drop=True)
,但我明白
ar d1 d2
latitude longitude
15 10.0 2.317681 1981-12-01 00:00:00 1981-12-04 03:00:00
10.1 2.293604 1981-12-01 00:00:00 1981-12-01 03:00:00
10.1 2.168276 1981-12-01 04:00:00 1981-12-01 22:00:00
10.1 2.293604 1981-12-02 08:00:00 1981-12-02 11:00:00
10.2 2.264552 1981-12-01 00:00:00 1981-12-01 02:00:00
10.2 2.114637 1981-12-01 03:00:00 1981-12-01 21:00:00
10.3 2.278556 1981-12-01 00:00:00 1981-12-04 02:00:00
10.4 1.384416 1981-12-01 00:00:00 1981-12-02 17:00:00
我需要的是(与上面的回答相同的请求):
latitude longitude d1 d2 ar
15 10 12/1/1981 0:00 12/4/1981 3:00 2.317681391
15 10.1 12/1/1981 0:00 12/1/1981 22:00 4.461879893
15 10.2 12/1/1981 0:00 12/1/1981 21:00 4.379188789
15 10.3 12/1/1981 0:00 12/4/1981 2:00 2.278556423
15 10.4 12/1/1981 0:00 12/2/1981 17:00 1.384415903
15 10.1 12/2/1981 8:00 12/2/1981 11:00 2.293604127
在没有申请的情况下解决此问题的任何帮助表示赞赏。提前致谢。
答案 0 :(得分:1)
您要实现的目标的描述不完全清楚,但以下给出了预期的输出:
(df.groupby(['latitude', 'longitude', (df['merge_time']-df['d2'])], sort=False)
.agg({'d1': 'min', 'd2': 'max', 'ar': 'sum'})
.droplevel(-1)
.reset_index()
)
输出:
latitude longitude d1 d2 ar
15 10.0 1981-12-01 00:00:00 1981-12-04 03:00:00 2.317681
15 10.1 1981-12-01 00:00:00 1981-12-01 22:00:00 4.461880
15 10.2 1981-12-01 00:00:00 1981-12-01 21:00:00 4.379189
15 10.3 1981-12-01 00:00:00 1981-12-04 02:00:00 2.278556
15 10.4 1981-12-01 00:00:00 1981-12-02 17:00:00 1.384416
15 10.1 1981-12-02 08:00:00 1981-12-02 11:00:00 2.293604