Два ответа.Этот первый предполагает, что с каждой строкой LL связаны строки ED.
import numpy as np
IDcount = data.ID.values
b, c = np.unique(IDcount, return_inverse=True)
g = np.cumsum(c)
df['grps'] = g
mean_vals = \
data[data.ID == 'ED'][['ID', 'grps', 'Time']].groupby(['ID', 'grps']).mean().Time.values
df2 = data[data.ID == 'LL'].copy()
df2['ED_mean'] = mean_vals
df2:
ID No Time Lat Lon Alt East North Count Fix grp ED_mean
0 LL 0 589105179.0 24.156741 -110.321346 -31.50 4898039.453 -3406895.053 9.0 2.0 1 1.316667
7 LL 0 589105180.0 24.156741 -110.321346 -31.50 4898039.836 -3406894.045 9.0 2.0 2 0.988333
14 LL 0 589105181.0 24.156741 -110.321346 -31.50 4898039.433 -3406894.003 9.0 2.0 3 1.000000
21 LL 0 589105182.0 24.156741 -110.321346 -31.51 4898038.460 -3406894.841 9.0 2.0 4 0.971667
28 LL 0 589105183.0 24.156741 -110.321346 -31.51 4898039.804 -3406894.107 9.0 2.0 5 0.995000
-
-
Здесьаналогичный ответ, который правильно учитывает случаи, когда для строки LL нет строк ED.Это не так быстро, как первый ответ.
remove_idx = [15, 16, 17, 18, 19, 20, 29, 30, 31, 32, 33, 34]
data2 = data.loc[~data.index.isin(remove_idx)].copy()
IDcount = data2.ID.values
b, c = np.unique(IDcount, return_inverse=True)
g = np.cumsum(c)
data['grps'] = g
grouping_df = data2[data2.ID == 'ED'][['ID', 'grps', 'Time']].copy()
grouped = grouping_df.groupby(['ID', 'grps']).mean()
grouped.reset_index(drop=False, inplace=True)
mean_df = grouped[['grps', 'Time']].copy()
mean_df.rename(columns={'Time': 'ED_mean'}, inplace=True)
LLs = data2[data2.ID == 'LL'].copy()
result_df = pd.merge(LLs, mean_df, on='grps', how='outer').set_index(LLs.index)
result_df:
ID No Time Lat Lon Alt East North Count Fix grps ED_mean
0 LL 0 589105179.0 24.156741 -110.321346 -31.50 4898039.453 -3406895.053 9.0 2.0 1 1.316667
7 LL 0 589105180.0 24.156741 -110.321346 -31.50 4898039.836 -3406894.045 9.0 2.0 2 0.988333
14 LL 0 589105181.0 24.156741 -110.321346 -31.50 4898039.433 -3406894.003 9.0 2.0 3 NaN
21 LL 0 589105182.0 24.156741 -110.321346 -31.51 4898038.460 -3406894.841 9.0 2.0 4 0.971667
28 LL 0 589105183.0 24.156741 -110.321346 -31.51 4898039.804 -3406894.107 9.0 2.0 5 NaN