Преобразование значений столбца в строки со столбцом идентификатора в конце - PullRequest
1 голос
/ 28 марта 2019

У меня есть измерения мощности, связанные с различными датчиками, то есть A1_Pin, A2_Pin и так далее. Эти измерения записываются в файл в виде столбцов. Данные однозначно записываются с отметками времени.

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

Я хочу изменить таблицу так, чтобы каждая строка соответствовала одному датчику. В последнем столбце указан идентификатор датчика, которому принадлежат данные строки.

Финальный стол должен выглядеть так:

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, Reshape, Stack и циклы, но не смог этого сделать. Может ли кто-нибудь помочь? Спасибо

Ответы [ 2 ]

1 голос
/ 28 марта 2019

Когда вы пытались stack, вы были на одном хорошем треке.вам нужно set_index сначала и reset_index после таких как:

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
1 голос
/ 28 марта 2019

Я бы попробовал что-то вроде этого:

df1.set_index('DateTime').unstack().reset_index()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...