Распределение значений по событиям датчика столбцов (pivot) в кадре данных pandas - PullRequest
0 голосов
/ 06 ноября 2018

Я борюсь с поворотом некоторых данных датчика в padas.

Я бы хотел прийти от этого

source_df = pd.DataFrame({'time': [1,1,1,1,2,2,2,2],
                          'sensor_id': ['s1', 's1', 's2', 's2', 's1', 's1', 's2', 's2'],
                          'value_type': ['a', 'b', 'a', 'b','a', 'b','a', 'b',],
                          'value': [1,2,3,4,5,6,7,8]})

time sensor_id value_type value 0 1 s1 a 1 1 1 s1 b 2 2 1 s2 a 3 3 1 s2 b 4 4 2 s1 a 5 5 2 s1 b 6 6 2 s2 a 7 7 2 s2 b 8

к этой форме

target_df = pd.DataFrame({'sensor_id': ['s1', 's2', 's1', 's2'],
                          'a': [1, 3, 5, 7],
                          'b': [2, 4, 6, 8],
                          'time': [1, 1, 2, 2]})
target_df

sensor_id a b time 0 s1 1 2 1 1 s2 3 4 1 2 s1 5 6 2 3 s2 7 8 2

Каким-то образом я ожидаю, что pivot сработает ... просто: source_df.pivot(columns = 'value_type', values = 'value') - но это не создает желаемого результата.

В R просто работает

enter image description here

но я действительно не понимаю, как получить тот же результат в pandas.

1 Ответ

0 голосов
/ 06 ноября 2018

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

df = (source_df.set_index(['sensor_id','time', 'value_type'])['value']
               .unstack()
               .reset_index()
               .rename_axis(None, axis=1))
print (df)
  sensor_id  time  a  b
0        s1     1  1  2
1        s1     2  5  6
2        s2     1  3  4
3        s2     2  7  8
...