Pandas 将列值重新格式化为行,并在末尾使用标识符列
我测量了与不同传感器相关的功率,即A1_引脚、A2_引脚等。这些测量值作为列记录在文件中。数据以时间戳进行唯一记录Pandas 将列值重新格式化为行,并在末尾使用标识符列,pandas,pandas-groupby,Pandas,Pandas Groupby,我测量了与不同传感器相关的功率,即A1_引脚、A2_引脚等。这些测量值作为列记录在文件中。数据以时间戳进行唯一记录 df1 = pd.DataFrame({'DateTime': ['12/12/2019', '12/13/2019', '12/14/2019', '12/15/2019', '12/16/2019'], 'A1_Pin': [2, 8, 8, 3, 9], 'A2_Pin': [1, 2, 3, 4, 5], 'A3_Pin': [85, 36, 78, 32, 75]})
df1 = pd.DataFrame({'DateTime': ['12/12/2019', '12/13/2019', '12/14/2019',
'12/15/2019', '12/16/2019'],
'A1_Pin': [2, 8, 8, 3, 9],
'A2_Pin': [1, 2, 3, 4, 5],
'A3_Pin': [85, 36, 78, 32, 75]})
我想修改表格,使每一行对应一个传感器。最后一列指示行数据所属的传感器ID
最后一个表应该如下所示:
df2 = pd.DataFrame({'DateTime': ['12/12/2019', '12/12/2019', '12/12/2019',
'12/13/2019', '12/13/2019','12/13/2019', '12/14/2019', '12/14/2019',
'12/14/2019', '12/15/2019','12/15/2019', '12/15/2019', '12/16/2019',
'12/16/2019', '12/16/2019'],
'Power': [2, 1, 85,8, 2, 36, 8,3,78, 3, 4, 32, 9, 5, 75],
'ModID': ['A1_PiN','A2_PiN','A3_PiN','A1_PiN','A2_PiN','A3_PiN',
'A1_PiN','A2_PiN','A3_PiN','A1_PiN','A2_PiN','A3_PiN',
'A1_PiN','A2_PiN','A3_PiN']})
我试过Groupby、Melt、Reforme、Stack和loops,但都做不到。如果有人能帮忙的话?谢谢我想试试这样的东西:
df1.set_index('DateTime').unstack().reset_index()
当您尝试使用
stack
时,您已经走上了一条很好的道路。您需要首先和之后执行以下操作:
df2 = df1.set_index('DateTime').stack().reset_index(name='Power')\
.rename(columns={'level_1':'ModID'}) #to fit the names your expected output
你会得到:
print (df2)
DateTime ModID Power
0 12/12/2019 A1_Pin 2
1 12/12/2019 A2_Pin 1
2 12/12/2019 A3_Pin 85
3 12/13/2019 A1_Pin 8
4 12/13/2019 A2_Pin 2
5 12/13/2019 A3_Pin 36
6 12/14/2019 A1_Pin 8
7 12/14/2019 A2_Pin 3
8 12/14/2019 A3_Pin 78
9 12/15/2019 A1_Pin 3
10 12/15/2019 A2_Pin 4
11 12/15/2019 A3_Pin 32
12 12/16/2019 A1_Pin 9
13 12/16/2019 A2_Pin 5
14 12/16/2019 A3_Pin 75