熊猫-结合使用df.loc进行多种操作?

时间:2018-10-15 15:05:30

标签: python pandas pandas-groupby

是否可以执行一个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 :(得分:1)

您可以对齐索引,然后使用就地 pd.DataFrame.update

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

请注意,这也消除了对Python级for循环的需要。

答案 1 :(得分:1)

我很确定以下方法会起作用:

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)

这要求value1value2不在df_1中,否则您将有重复的列。如果这是一个潜在问题,请在合并前使用df_1 = df_1.drop(columns=['value1', 'value2'], errors='ignore')