Разделить один столбец с нерегулярной выборкой на несколько столбцов с одинаковыми временными метками в pandas - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть экспорт из системы, который я не могу изменить, и мне нужно изменить данные для анализа. Мой фрейм данных имеет следующий формат:

Timestamp  |  Name | Value
===========================
'14:00:00' | Var A | 0
'14:00:01' | Var A | 1
'14:00:02' | Var A | 2
...
'15:00:00' | Var A | 3600
'14:00:00' | Var B | 0
'14:10:00' | Var B | 600
..
'15:00:00' | Var B | 3600
'14:00:00' | Var C | 1000
...

Таким образом, это в основном объединение журналов нескольких переменных, каждая из которых имеет разную частоту дискретизации. Мне нужно иметь одну частоту дискретизации (например, 1 секунду) и каждую переменную в независимом столбце. Итак, что мне нужно сделать, это:

Timestamp  |Var A  | Var B| Var C|.....
'14:00:01' | 0     | 0    | 1000 | ...
'14:00:02' | 1     | 1    |  ... |
'14:00:03' | 2     | 2    |      |
    ...    | ...   | ...  |      |
'15:00:00' | 3600  | 3600 |      |

Обратите внимание, что первоначально у B был период считывания 10 минут, но теперь он имеет 1 секунду, и значения интерполируются. Я довольно новичок в pandas, поэтому любая помощь будет принята с благодарностью

1 Ответ

0 голосов
/ 15 февраля 2020

Использование:

#if neccessary
#df['Timestamp']= df['Timestamp'].apply(eval)
new_df = (df.assign(Timestamp = pd.to_datetime(df['Timestamp'].astype(str)))
            .pivot(*df)
            .asfreq('s')
            .reset_index()
            .assign(Timestamp = lambda x: x['Timestamp'].dt.time)
            .interpolate()
            .rename_axis(columns = None)
         )
print(new_df)

     Timestamp   Var A   Var B   Var C
0     14:00:00     0.0     0.0  1000.0
1     14:00:01     1.0     1.0  1000.0
2     14:00:02     2.0     2.0  1000.0
3     14:00:03     3.0     3.0  1000.0
4     14:00:04     4.0     4.0  1000.0
...        ...     ...     ...     ...
3596  14:59:56  3596.0  3596.0  1000.0
3597  14:59:57  3597.0  3597.0  1000.0
3598  14:59:58  3598.0  3598.0  1000.0
3599  14:59:59  3599.0  3599.0  1000.0
3600  15:00:00  3600.0  3600.0  1000.0

[3601 rows x 4 columns]
...