如何编写一个 lambda 函数来计算具有 Pandas agg 函数中其他列条件的客户端的唯一计数

问题描述

我正在尝试从具有某些条件的初始数据帧计算度量。 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','l2'])['view'].sum()

df['click'] = df.groupby(['date_diff','l2'])['click'].sum()

我正在尝试以这种方式编写它,但不知道如何计算一列并将条件传递给 agg pandas 函数中的另一列

agg_mult_df= df.groupby(
     ['date_diff','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',).reset_index()

谁能帮我找出 lambda 部分(我认为这是唯一的选择),好吗?

这是示例 initial df

和结果df

result df

解决方法

我没有为 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)

希望对大家有帮助)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...