为pandas

时间:2016-05-04 09:13:58

标签: pandas jupyter

表格如下:

Sensors M001    M002        
Time                                                                                    
01:28.2  0      0               
01:40.2  1      1               
01:52.2  0      1               
02:04.2  1      0   

我想创建一个表,每个列有2个新的空副本,如下所示:

Sensors M001 M001(on) M001(off) M002    M002(on)  M002(off) 
Time                                                                                    
01:28.2  0      -       -       0        -         -
01:40.2  1      -       -       1        -         -
01:52.2  0      -       -       1        -         -
02:04.2  1      -       -       0        -         -

1 个答案:

答案 0 :(得分:0)

IIUC您可以使用loc创建新列,然后按sort_index对列名进行排序:

for col in df.columns:
    df.loc[:, col + '(on)'] = np.nan
    df.loc[:, col + '(off)'] = np.nan

print df.sort_index(1)

Sensors  M001  M001(off)  M001(on)  M002  M002(off)  M002(on)
Time                                                         
01:28.2     0        NaN       NaN     0        NaN       NaN
01:40.2     1        NaN       NaN     1        NaN       NaN
01:52.2     0        NaN       NaN     1        NaN       NaN
02:04.2     1        NaN       NaN     0        NaN       NaN

另一种选择是通过列表理解创建新的列名,然后将新的DataFrameconcat克隆到原始的df

print df

Sensors  M001  M002  M003
Time                     
01:28.2     0     0     1
01:40.2     1     1     0
01:52.2     0     1     1
02:04.2     1     0     1

cols = ['{}{}'.format(x, y) for y in ['(on)','(off)'] for x in df.columns.tolist()]
df1 = pd.DataFrame(columns = cols, index= df.index)
print df1
        M001(on) M002(on) M003(on) M001(off) M002(off) M003(off)
Time                                                            
01:28.2      NaN      NaN      NaN       NaN       NaN       NaN
01:40.2      NaN      NaN      NaN       NaN       NaN       NaN
01:52.2      NaN      NaN      NaN       NaN       NaN       NaN
02:04.2      NaN      NaN      NaN       NaN       NaN       NaN

df = pd.concat([df,df1], axis=1)

print df.sort_index(1)
Sensors  M001 M001(off) M001(on)  M002 M002(off) M002(on)  M003 M003(off)  \
Time                                                                        
01:28.2     0       NaN      NaN     0       NaN      NaN     1       NaN   
01:40.2     1       NaN      NaN     1       NaN      NaN     0       NaN   
01:52.2     0       NaN      NaN     1       NaN      NaN     1       NaN   
02:04.2     1       NaN      NaN     0       NaN      NaN     1       NaN   

Sensors M003(on)  
Time              
01:28.2      NaN  
01:40.2      NaN  
01:52.2      NaN  
02:04.2      NaN