首页 > 解决方案 > 同组中的 Sum 和 Listby Pandas

问题描述

我想创建一个简单的变量,在其中同时执行 df_dates 和 df_sum 。可能吗?我的意思是,我需要对所有单元格进行总和,但对于“日期”,我需要一个数组(列表)

import datetime
import pandas as pd
df = pd.read_csv('global.csv')
df_dates = df.groupby(['Io Id'])['Date'].apply(list)
df_sum = df.groupby(['Advertiser ID', 'Campaign Id', 'C Goal', 'C Goal KPI', 'C Goal KPI Value', 'Insertion Order', 'Io Id', 'IO Pacing', 'IO Pacing Rate', 'IO Pacing Amount', 'IO Goal Type', 'IO Goal Value', 'IO Budget Type', 'IO_Bud_Imp', 'IO_Bud_Start', 'IO_Bud_End'])['Impressions', 'Clicks', 'Click Rate (CTR)', 'Total Conversions', 'Post-Click Conversions', 'Post-View Conversions', 'Revenue (Adv Currency)'].sum()

df_dates = df_dates.to_frame()
df_first = pd.merge(df_dates, df_sum, on='Io Id')

标签: pythonpandas

解决方案


尝试使用agg字典来了解如何聚合每一列:

创建要求和的列列表:

collist = ['Impressions', 'Clicks', 'Click Rate (CTR)', 'Total Conversions', 'Post-Click Conversions', 'Post-View Conversions', 'Revenue (Adv Currency)']

从此列表创建字典:

dsum = {i:'sum' for i in collist}

现在使用函数列表将“日期”添加到此字典

dsum['Date'] = list

现在,将 groupby 与 agg 一起使用:

collist.append('Date')
df.groupby(['Advertiser ID', 'Campaign Id', 'C Goal', 'C Goal KPI', 
            'C Goal KPI Value', 'Insertion Order', 'Io Id', 'IO Pacing', 
            'IO Pacing Rate', 'IO Pacing Amount', 'IO Goal Type', 
            'IO Goal Value', 'IO Budget Type', 'IO_Bud_Imp', 'IO_Bud_Start', 
            'IO_Bud_End'])[collist].agg(dsum)

推荐阅读