我正在尝试从具有某些条件的初始数据帧计算度量。 df 是我的初始数据框。 以下是我在新数据框中需要的度量,但我不知道如何按列分组:
df['uniq_view_client'] = df[df['view'] == 1].groupby(['date_diff','platform','l2'])['user_client_id'].nunique()
df['uniq_click_client'] = df[df['click'] == 1].groupby(['date_diff','attributes_platform','l2'])['user_client_id'].nunique()
df['view'] = df.groupby(['date_diff','platform','l2'])['view'].sum()
df['click'] = df.groupby(['date_diff','platform','l2'])['click'].sum()
我正在尝试以这种方式编写它,但不知道如何计算一列并将条件传递给 agg pandas 函数中的另一列
agg_mult_df= df.groupby(
['date_diff','platform','l2']
).agg(
uniq_view_client=('clint_id','nunique')# pass a lambda function that counts unique number of clients only if views =1,
uniq_click_client=('clint_id','nunique') #pass a lambda function that counts unique number of clients only if click =1,
all_view= ('view', 'sum'),
all_click= ('click', 'sum'),
).reset_index()
谁能帮我找出 lambda 部分(我认为这是唯一的选择),好吗?
这是示例 initial df
和结果df
答案 0 :(得分:0)
我没有为 pandas agg fuction 找到任何解决方案,但确实设法通过这种方式解决了:
df_test = df.groupby(['date_diff','platform','l2'], as_index=False).apply(lambda x: pd.Series({
'a_sum' : x['view'].sum(),
'a_click' : x['click'].sum(),
'client_click' : x[x['click'] == 1]['client_id'].nunique(),
'client_view' : x[x['view'] == 1]['client_id'].nunique()
})
).reset_index(drop = True)
希望对大家有帮助)