Pandas 按时间值进行轴心排序-熊猫

Pandas 按时间值进行轴心排序-熊猫,pandas,pivot,Pandas,Pivot,我想透视adf并显示基于时间值的值,而不是列值 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','

我想透视a
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                  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
正确排序,我最终会删除日期,只留下时间

不幸的是,
pivot_表
默认情况下对列名称进行排序,并且没有参数来避免它。因此,可能的解决方案是通过列
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  
#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