Панды - Объединить df.loc для нескольких операций? - PullRequest
0 голосов
/ 15 октября 2018

Есть ли способ выполнить один df.loc поиск, но затем выполнить несколько операций над подмножеством строк?

Вот мотивация.У меня есть 2 датафрейма с данными о тех же пользователях.Я перебираю df_2.groupby('user_id') и затем смотрю на другой фрейм данных, чтобы присвоить некоторые значения:

for user, user_df in df_2.groupby('user_id'):
    df_1.loc[df_1.user_id == user, 'value_1'] == user_df.value_1.mean()
    df_1.loc[df_1.user_id == user, 'value_2'] == user_df.value_2.min()

Могу ли я каким-то образом объединить их для выполнения только одного df.loc, но назначить оба значения?

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Я вполне уверен, что сработает следующее:

grouped = df_2.groupby('user_id').agg({'value1': 'mean', 'value2': 'min'})
df_1 = df_1.merge(grouped, left_on='user_id', right_index=True, sort=False)

Это требует, чтобы value1 и value2 не были в df_1, иначе у вас будут дублирующиеся столбцы.Если это потенциальная проблема, используйте df_1 = df_1.drop(columns=['value1', 'value2'], errors='ignore') до слияния.

0 голосов
/ 15 октября 2018

Вы можете выровнять индексы, а затем использовать на месте pd.DataFrame.update:

df_1 = df_1.set_index('user_id')
df_1.update(df_2.groupby('user_id')[['value_1', 'value_2']].mean())

Обратите внимание, что это также устраняет необходимость в уровне Pythonfor петля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...