如何将计算列从初始数据帧合并到新数据帧

时间:2021-07-30 15:52:04

标签: python pandas dataframe

我有一个数据帧(来自 sql),需要从初始数据帧计算不同的指标,然后将它们全部合并到最终数据帧中。 初始数据帧是 merged_stats_skuranks_df

结果数据框是 result_raw = pd.DataFrame(columns=['date_diff','attributes_platform','l2','dau_view', 'dau_click', 'dau_to_cart', 'dau_preorder', 'dau_order', 'dau_ps', 'view'])

我的措施是这样的

               result_raw['dau_click'] = merged_stats_skuranks_df[merged_stats_skuranks_df['dau_click'] == 1].groupby(['date_diff','attributes_platform','l2'])['user_client_id'].nunique()
               result_raw['dau_to_cart'] = merged_stats_skuranks_df[merged_stats_skuranks_df['dau_to_cart'] == 1].groupby(['date_diff','attributes_platform','l2'])['user_client_id'].nunique()
               result_raw['dau_preorder'] = merged_stats_skuranks_df[merged_stats_skuranks_df['dau_preorder'] == 1].groupby(['date_diff','attributes_platform','l2'])['user_client_id'].nunique()
               result_raw['dau_order'] = merged_stats_skuranks_df[merged_stats_skuranks_df['dau_order'] == 1].groupby(['date_diff','attributes_platform','l2'])['user_client_id'].nunique()
               result_raw['dau_ps'] = merged_stats_skuranks_df[merged_stats_skuranks_df['dau_ps'] == 1].groupby(['date_diff','attributes_platform','l2'])['user_client_id'].nunique() 

但结果我得到了结果度量而不是分组列(图中的示例)。分组列为空

the result pic

我做错了什么以及如何正确地将所有这些计算列组合到一个新的 df 中。

我也想像这样计算所有的度量,但我无法在 lambda 中编写正确的条件(如果 dau_view == 1,则计数唯一的 user_client_id)


result_raw = merged_stats_skuranks_df.groupby['date_diff','attributes_platform','l2'].agg([
    ('dau_view', lambda x: (x.dau_view == 1).nunique()), 
    ('dau_to_cart', lambda x: (x.dau_tocart == 1).nunique()), 
]).reset_index()

抱歉,这可能相当简单,但我是 Python 新手,无法弄清楚如何解决问题。 感谢所有的帮助)

1 个答案:

答案 0 :(得分:0)

您可以尝试使用 pd.concat() 组合结果,而不是为特定列分配值。

试试这个:

# Create an empty dataframe
df = pd.DataFrame()

# Calculate metrics and combine results
for col in ['dau_click','dau_to_cart', 'dau_preorder', 'dau_order', 'dau_ps']:
   temp_df = merged_stats_skuranks_df[merged_stats_skuranks_df[col] == 1].groupby(['date_diff','attributes_platform','l2'])['user_client_id'].nunique().reset_index()
   df = pd.concat([df, temp_df])