Вы можете создать список серий, а затем использовать pandas.concat
, чтобы объединить их в один фрейм данных.
Решение функционально идентично @DyZ, но выложено по-другому.
series_list = [df.set_index('Time'+str(i))['Sensor'+str(i)].dropna() \
for i in range(1, int(len(df.columns)/2) + 1)]
res = pd.concat(series_list, axis=1)\
.rename_axis('Time').reset_index()
Настройка
df = pd.DataFrame({'Time1': [0, 1, 2, 3, 4, 5, np.nan, np.nan, np.nan, np.nan, np.nan],
'Sensor1': ['x', 'x', 'x', 'x', 'x', 'x', np.nan, np.nan, np.nan, np.nan, np.nan],
'Time2': [0, 2, 4, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan],
'Sensor2': ['y', 'y', 'y', np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan],
'Time3': [0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5],
'Sensor3': ['z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z']})
Результат
print(res)
Time Sensor1 Sensor2 Sensor3
0 0.0 x y z
1 0.5 NaN NaN z
2 1.0 x NaN z
3 1.5 NaN NaN z
4 2.0 x y z
5 2.5 NaN NaN z
6 3.0 x NaN z
7 3.5 NaN NaN z
8 4.0 x y z
9 4.5 NaN NaN z
10 5.0 x NaN z