表格如下:
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 - -
答案 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
另一种选择是通过列表理解创建新的列名,然后将新的DataFrame
和concat
克隆到原始的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