如果乔的答案没有给你你想要的速度,我认为可以通过消除 for 循环中的统计计算来改进。 (我正在窃取他的 df 创建,因为他是将其放入答案中的英雄。)理想情况下,您也可以摆脱 for 循环,但我认为随着时间戳索引被重复(跨 ID 号),它可以合并这两个数据框很棘手。
这是我仍然使用迭代来处理开始/结束时间的尝试。首先,我将 int_id 应用于父 df。我想将其添加到父数据帧中,这样我就可以进行“分组”,而无需创建“临时”数据帧并对其进行统计。
for index, row in df2.iterrows():
df1.loc[df1.Time.between(row.start,row.end), 'int_id'] = row.int_id
ID Time X Y Z H int_id
0 01 2020-02-03 18:13:16 0.011 0.012 0.013 0.014 1.0
1 01 2020-02-03 18:13:21 0.015 0.016 0.017 0.018 1.0
2 01 2020-02-03 18:13:26 0.013 0.013 0.013 0.013 1.0
3 01 2020-02-03 18:13:31 0.015 0.015 0.015 0.015 1.0
4 02 2020-02-03 18:13:16 0.021 0.022 0.023 0.024 1.0
5 02 2020-02-03 18:13:21 0.025 0.026 0.027 0.028 1.0
6 02 2020-02-03 18:13:26 0.023 0.023 0.023 0.023 1.0
然后,我定义聚合,以便在循环完成后一次性获取所有内容。
aggs = {'X':['sum', 'max', 'mean', 'median'],
'Y':['sum', 'max', 'mean', 'median'],
'Z':['sum', 'max', 'mean', 'median'],
'H':['sum', 'max', 'mean', 'median']}
df2 = df1.groupby(by=('int_id')).agg(aggs)
X Y Z H
sum max mean median sum max mean median sum max mean median sum max mean median
int_id
1.0 0.732 0.095 0.0366 0.034 0.739 0.102 0.03695 0.034 0.708 0.079 0.0354 0.034 0.827 0.127 0.04135 0.0345
2.0 0.732 0.095 0.0366 0.034 0.739 0.102 0.03695 0.034 0.708 0.079 0.0354 0.034 0.827 0.127 0.04135 0.0345
注意:这里你在列上有一个多重索引。您可以通过以下方式加入他们。
df_final.columns = ['_'.join(col).strip() for col in df_final.columns.values]
X_sum X_max X_mean X_median Y_sum Y_max Y_mean Y_median Z_sum Z_max Z_mean Z_median H_sum H_max H_mean H_median
int_id
1.0 0.732 0.095 0.0366 0.034 0.739 0.102 0.03695 0.034 0.708 0.079 0.0354 0.034 0.827 0.127 0.04135 0.0345
2.0 0.732 0.095 0.0366 0.034 0.739 0.102 0.03695 0.034 0.708 0.079 0.0354 0.034 0.827 0.127 0.04135 0.0345