将值分布到熊猫数据框中的列(枢轴)传感器事件中

时间:2018-11-06 12:27:36

标签: python pandas pivot-table

我很想在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 :(得分:1)

set_indexunstack一起使用:

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