Код: Выделить всё
df = pd.DataFrame({
'group': ['a', 'a', 'a', 'a'],
'x': [10, 20, np.nan, 20],
'weight_x': [10, 15, np.nan, 25],
'y': [25, 35, 45, np.nan],
'weight_y': [10, 20, 10, np.nan]
})
Код: Выделить всё
summary = (
df
.groupby(['group'])
.apply(
lambda x: pd.Series([
np.average(x['x'], weights=x['weight_x']),
np.average(x['y'], weights=x['weight_y'])
], index=['wt_avg_x', 'wt_avg_y'])
)
.reset_index()
)
Код: Выделить всё
group wt_avg_x wt_avg_y
0 a NaN NaN
Код: Выделить всё
group wt_avg_x wt_avg_y
0 a 20.5 35
Код: Выделить всё
summary = (
df.dropna(subset=['x', 'y', 'weight_x', 'weight_y'])
.groupby(['group'])
.apply(
lambda x: pd.Series([
np.average(x['x'], weights=x['weight_x']),
np.average(x['y'], weights=x['weight_y'])
], index=['wt_avg_x', 'wt_avg_y'])
)
.reset_index()
)
Подробнее здесь: https://stackoverflow.com/questions/791 ... l-with-nan