【问题标题】:Pivot sort by time values - Pandas按时间值进行透视排序 - Pandas
【发布时间】:2019-09-24 06:03:31
【问题描述】:

我想pivot 和df 显示基于时间值的值,而不是列值。

df = pd.DataFrame({
    'Place' : ['John','Alan','Cory','Jim','John','Alan','Cory','Jim'],                                
    'Number' : ['2','3','5','5','3','4','6','6'],          
    'Code' : ['1','2','3','4','1','2','3','4'],                      
    'Time' : ['1904-01-01 08:00:00','1904-01-01 09:00:00','1904-01-02 01:00:00','1904-01-02 02:00:00','1904-01-01 08:10:00','1904-01-01 09:10:00','1904-01-02 01:10:00','1904-01-02 02:10:00'],                           
    })

df = df.pivot_table(index = 'Number', columns = 'Place', values = 'Time', aggfunc = 'first').fillna('')

输出:

Place                  Alan                 Cory                  Jim                 John
Number                                                                                    
2                                                                      1904-01-01 08:00:00
3       1904-01-01 09:00:00                                            1904-01-01 08:10:00
4       1904-01-01 09:10:00                                                               
5                            1904-01-02 01:00:00  1904-01-02 02:00:00                     
6                            1904-01-02 01:10:00  1904-01-02 02:10:00 

预期输出:

Place                  John                 Alan                 Cory                  Jim
Number                                                                                    
2       1904-01-01 08:00:00                                                               
3       1904-01-01 08:10:00  1904-01-01 09:00:00                                          
4                            1904-01-01 09:10:00                                          
5                                                 1904-01-02 01:00:00  1904-01-02 02:00:00
6                                                 1904-01-02 01:10:00  1904-01-02 02:10:00             

注意:我只添加了一个虚拟日期来区分午夜之后的时间。一旦df 被适当地排序,我最终会放弃日期并留下时间。

【问题讨论】:

    标签: pandas pivot


    【解决方案1】:

    不幸的是pivot_table 默认情况下对列名进行排序,并且没有参数来避免它。所以可能的解决方案是 DataFrame.reindex 由列 Place 的原始唯一值:

    #if necessary convert to datetimes and sorting
    df['Time'] = pd.to_datetime(df['Time'])
    df = df.sort_values('Time')
    df1 = df.pivot_table(index='Number',columns='Place',values='Time',aggfunc='first').fillna('')
    
    df1 = df1.reindex(columns=df['Place'].unique())
    print (df1)
    Place                  John                 Alan                 Cory  \
    Number                                                                  
    2       1904-01-01 08:00:00                                             
    3       1904-01-01 08:10:00  1904-01-01 09:00:00                        
    4                            1904-01-01 09:10:00                        
    5                                                 1904-01-02 01:00:00   
    6                                                 1904-01-02 01:10:00   
    
    Place                   Jim  
    Number                       
    2                            
    3                            
    4                            
    5       1904-01-02 02:00:00  
    6       1904-01-02 02:10:00  
    

    【讨论】:

      猜你喜欢
      • 2016-06-09
      • 1970-01-01
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多