Pandas 将列值重新格式化为行,并在末尾使用标识符列

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]})

我测量了与不同传感器相关的功率,即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]})
我想修改表格,使每一行对应一个传感器。最后一列指示行数据所属的传感器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