是否可以执行一个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,但同时分配两个值吗?
答案 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)
这要求value1
和value2
不在df_1
中,否则您将有重复的列。如果这是一个潜在问题,请在合并前使用df_1 = df_1.drop(columns=['value1', 'value2'], errors='ignore')
。