我有一个数据帧(来自 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()
但结果我得到了结果度量而不是分组列(图中的示例)。分组列为空
我做错了什么以及如何正确地将所有这些计算列组合到一个新的 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 新手,无法弄清楚如何解决问题。 感谢所有的帮助)
答案 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])