Python 数据透视表如何添加嵌套列

Python 数据透视表如何添加嵌套列,python,pandas,pivot-table,Python,Pandas,Pivot Table,df 有一个表,我需要从中得到一个包含以下数据的汇总表: 行是一天中的小时数,列是天,以呼叫总数/未接/呼叫总持续时间为单位 如何在此表中添加其他列(全部、丢失、时间)。到目前为止,我只计算了每小时通话的总持续时间和总次数。真理在不同的表格里 billsec disposition Date Hour 0 185 ANSWERED 2016-11-01 00 1 0 NO A

df

有一个表,我需要从中得到一个包含以下数据的汇总表:

行是一天中的小时数,列是天,以呼叫总数/未接/呼叫总持续时间为单位

如何在此表中添加其他列(全部、丢失、时间)。到目前为止,我只计算了每小时通话的总持续时间和总次数。真理在不同的表格里

    billsec       disposition    Date           Hour
0   185            ANSWERED     2016-11-01       00
1   0             NO ANSWER     2016-11-01       00
2   41             ANSWERED     2016-11-01       01
3   4              ANSWERED     2016-12-02       05

IIUC您可以这样做:

假设我们有以下数据帧:

df.pivot_table(rows='Hour',cols='Date',aggfunc=len,fill_value=0)
df.pivot_table(rows='Hour',cols='Date',aggfunc=sum,fill_value=0)
我们可以做到以下几点:

In [248]: df
Out[248]:
             calldate  billsec disposition
0 2016-11-01 00:05:26      185    ANSWERED
1 2016-11-01 00:01:26        0   NO ANSWER
2 2016-11-01 00:05:19       41    ANSWERED
3 2016-11-01 00:16:02        4    ANSWERED
4 2016-11-02 01:16:02       55    ANSWERED
5 2016-11-02 02:02:02        2   NO ANSWER
收益率:

funcs = {
    'billsec': {
        'all':'size',
        'time':'sum'
    },
    'disposition': {
        'lost': lambda x: (x == 'NO ANSWER').sum()
    }
}

(df.assign(d=df.calldate.dt.strftime('%d.%m'), t=df.calldate.dt.hour)
   .groupby(['t','d'])[['billsec','disposition']].agg(funcs)
   .unstack('d', fill_value=0)
   .swaplevel(axis=1)
   .sort_index(level=[0,1], axis=1)
)

IIUC您可以这样做:

假设我们有以下数据帧:

df.pivot_table(rows='Hour',cols='Date',aggfunc=len,fill_value=0)
df.pivot_table(rows='Hour',cols='Date',aggfunc=sum,fill_value=0)
我们可以做到以下几点:

In [248]: df
Out[248]:
             calldate  billsec disposition
0 2016-11-01 00:05:26      185    ANSWERED
1 2016-11-01 00:01:26        0   NO ANSWER
2 2016-11-01 00:05:19       41    ANSWERED
3 2016-11-01 00:16:02        4    ANSWERED
4 2016-11-02 01:16:02       55    ANSWERED
5 2016-11-02 02:02:02        2   NO ANSWER
收益率:

funcs = {
    'billsec': {
        'all':'size',
        'time':'sum'
    },
    'disposition': {
        'lost': lambda x: (x == 'NO ANSWER').sum()
    }
}

(df.assign(d=df.calldate.dt.strftime('%d.%m'), t=df.calldate.dt.hour)
   .groupby(['t','d'])[['billsec','disposition']].agg(funcs)
   .unstack('d', fill_value=0)
   .swaplevel(axis=1)
   .sort_index(level=[0,1], axis=1)
)

欢迎来到StackOverflow。请将您的数据集以文本形式发布,以便人们可以复制和粘贴它们,并将它们用于编码答案-当您使用图像时,这是不可能的。请阅读@MaxU Corrected,我希望这是正确的。你能解释一下你想如何计算
所有
丢失的
时间
列吗?我想:
所有
-是一小时
丢失的行数
处理
列“无答案”的一个示例
Time
-当日HourId帮助列中的值之和?欢迎使用StackOverflow。请将您的数据集以文本形式发布,以便人们可以复制和粘贴它们,并将它们用于编码答案-当您使用图像时,这是不可能的。请阅读@MaxU Corrected,我希望这是正确的。你能解释一下你想如何计算
所有
丢失的
时间
列吗?我想:
所有
-是一小时
丢失的行数
处理
列“无答案”的一个示例
Time
-当天HourId help列中的值之和?