Рассчитайте средневзвешенное значение, используя группировку Pandas, и обработайте NaN.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Рассчитайте средневзвешенное значение, используя группировку Pandas, и обработайте NaN.

Сообщение Anonymous »

Я пытаюсь вычислить средневзвешенное значение с помощью функции groupby. Однако я имею дело с пустым значением в моем фрейме данных.

Код: Выделить всё

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()
)
Но dropna удаляет всю строку. Как я мог игнорировать значения nan только в функции np.average.

Подробнее здесь: https://stackoverflow.com/questions/791 ... l-with-nan
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»