#python-3.x #pandas #pivot
#python-3.x #pandas #поворот
Вопрос:
У меня есть набор данных, который изначально выглядит следующим образом
ContextID VariableID Timestamp Timestampms Value
7304693 516 2018-07-11 10:49:36 153 1.00000001335143e-10
7304693 516 2018-07-11 10:49:36 291 1.00000001335143e-10
7304693 516 2018-07-11 10:49:36 455 1.00000001335143e-10
7304693 517 2018-07-11 10:49:36 153 0.00266113295219839
7304693 517 2018-07-11 10:49:36 291 0.00266113295219839
7304693 517 2018-07-11 10:49:36 455 0.00236816401593387
7304693 517 2018-07-11 10:49:36 483 0.00236816401593387
Я хотел преобразовать набор данных для создания VariableID
отдельных столбцов, для которых мне пришлось объединить Timestamp
и Timestampms
для создания уникальных значений, и я сделал это с помощью
data = pd.read_excel('Book1.xlsx', header = 0, parse_dates = [['Timestamp', 'Timestampms']])
data = data.rename(columns={'Timestamp_Timestampms': 'Time'})
data = data.pivot(index= 'Time', columns='VariableID', values='Value')
data = data.reset_index(level=0)
и получил следующий фрейм данных
Time 516 517
2018-07-11 10:49:36 153 1.00000001335143e-10 0.00266113295219839
2018-07-11 10:49:36 291 1.00000001335143e-10 0.00266113295219839
2018-07-11 10:49:36 455 1.00000001335143e-10 0.00236816401593387
2018-07-11 10:49:36 483 nan 0.00236816401593387
Теперь я хотел бы получить некоторую помощь относительно того, как я могу разделить Time
столбец на 2 разных столбца. Первый столбец содержит только дату, а второй столбец содержит время, за которым следуют другие столбцы, такие как 516
и 517
.
Date Time_ms
2018-07-11 10:49:36_153
2018-07-11 10:49:36_291
2018-07-11 10:49:36_455
2018-07-11 10:49:36_483
2018-07-11 10:49:36_578
Кроме того, я хотел бы установить ContextID
столбец из исходной таблицы в качестве индекса для сводной таблицы и хотел бы знать, как это можно сделать?
Заранее спасибо
Ответ №1:
Используйте Series.str.split
с помощью Series.str.replace
:
data = data.rename(columns={'Timestamp_Timestampms': 'Time'})
#added ContextID column
data = data.set_index(['ContextID','Time','VariableID'])['Value'].unstack()
data = data.reset_index()
data[['Time','Time_ms']] = data.Time.str.split(n=1, expand=True)
#python separator for ms is . (altarnative solution)
#data['Time_ms'] = data['Time_ms'].str.replace('s ', '.')
data['Time_ms'] = data['Time_ms'].str.replace('s ', '_')
c = ['ContextID','Time','Time_ms']
data = data[c data.columns.difference(c).tolist()]
data = data.rename_axis(None, axis=1)
print (data)
ContextID Time Time_ms 516 517
0 7304693 2018-07-11 10:49:36_153 1.000000e-10 0.002661
1 7304693 2018-07-11 10:49:36_291 1.000000e-10 0.002661
2 7304693 2018-07-11 10:49:36_455 1.000000e-10 0.002368
3 7304693 2018-07-11 10:49:36_483 NaN 0.002368