Как разбить столбец после поворота таблицы? - PullRequest
0 голосов
/ 04 марта 2019

У меня есть набор данных, который изначально выглядит так:

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 Ответ

0 голосов
/ 04 марта 2019

Использование 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
...