【问题标题】:pandas pivot_table keep indexpandas pivot_table 保持索引
【发布时间】:2016-08-02 20:26:50
【问题描述】:

我有一个数据框:

import pandas as pd

data = {'day_bucket': ['2011-01-21', '2011-01-22', '2011-01-23', '2011-01-24'], 'label': ['birds', 'birds', 'birds', 'birds'], 'numeric_value': [4, 0, 7, 3]}

df = pd.DataFrame(data)

   day_bucket  label  numeric_value
0  2011-01-21  birds              4
1  2011-01-22  birds              0
2  2011-01-23  birds              7
3  2011-01-24  birds              3

我想旋转这个数据框,以便我有一个列birds,下面的值。

pd.pivot_table(df, values='numeric_value', index='day_bucket',columns='label')  

给予:

label       birds
day_bucket             
2011-01-21  4
2011-01-22  0
2011-01-23  7
2011-01-24  3

我应该怎么做才能保留索引?结果将如下所示:

    day_bucket birds    
0   2011-01-21  4
1   2011-01-22  0
2   2011-01-23  7
3   2011-01-24  3 

【问题讨论】:

    标签: python pandas pivot pivot-table


    【解决方案1】:

    set_indexappend

    df.set_index(['day_bucket', 'label'], append=True) \
      .rename_axis([None, None, None]).squeeze().unstack()
    
    
                  birds
    0 2011-01-21      4
    1 2011-01-22      0
    2 2011-01-23      7
    3 2011-01-24      3
    

    【讨论】:

      【解决方案2】:

      同时,我也想出了一个结果

      pd.pivot_table(df, values='numeric_value', 
                         index=[df.index.values,'day_bucket'],
                         ,columns='label').reset_index('day_bucket')
      
      label  day_bucket  mortality_birds
      0      2011-01-21                4
      1      2011-01-22                0
      2      2011-01-23                7
      3      2011-01-24                3
      

      【讨论】:

        【解决方案3】:

        仅作补充:

        pt2 = pt.rename_axis(None, axis=1).reset_index()
        print(pt2)
        
           day_bucket  birds
        0  2011-01-21      4
        1  2011-01-22      0
        2  2011-01-23      7
        3  2011-01-24      3
        

        用于它的数据框是:

        df = pd.DataFrame({'day_bucket': ['2011-01-21', '2011-01-22', '2011-01-23', '2011-01-24'],
                           'label': ['birds', 'birds', 'birds', 'birds'],
                           'num_value': [4, 0, 7, 3]})
        
        pt = pd.pivot_table(df,
                            values='num_value',
                            index='day_bucket',
                            columns='label',
                            aggfunc=np.sum)
        print(pt, '\n')
        
        label       birds
        day_bucket       
        2011-01-21      4
        2011-01-22      0
        2011-01-23      7
        2011-01-24      3 
        

        【讨论】:

        • 这是所有解决方案中最简单的。谢谢!
        猜你喜欢
        • 2019-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-21
        • 2017-06-18
        • 2016-02-14
        • 1970-01-01
        • 2020-09-05
        相关资源
        最近更新 更多