Pandas DataFrame Advanced Indexing - PullRequest
0 голосов
/ 02 июля 2018

Я ищу некоторую помощь с сортировкой DataFrame панд. У меня есть фрейм данных из 8 столбцов, которые идут как;

['Date' , 'S ID', 'Se ID', 'S #', 'File Size (Mb)', 'HD name', 'Start Time', 'End time']

Я тогда сделал:

DataFile.groupby(['HD Name','Date','Se ID','S ID'])['File Size (Mb)'].agg({'Sequence #':'count','File Size (Mb)':'sum'}).reset_index().rename(columns={'Sequence #':'# of Files'})

, который берет мои данные и группирует их по соответствующим параметрам grouby () и суммирует размеры файлов. Я хотел бы добавить к этому два столбца, которые содержат первое «Время начала» и последнее «Время окончания», как мне поступить?
Я думаю, что мой единственный вариант может заключаться в том, чтобы циклически перебирать данные или создавать дублированный фрейм данных для определения времени начала и окончания сгруппированных данных.
Любые идеи будут оценены!

Пример кадра данных:

«Имя жесткого диска»: [H5, H5, H5, H5, H5]
'S ID': [LA, LA, LA, SD, SD] ​​
'Se ID': [1200, 1200, 1200, 30, 30]
«Дата»: ['10 / 01/2018 ', '10 / 01/2018', '10 / 01/2018 ', '09 / 03/2018', '09 / 03/2018 ']
'#': [1, 2, 3, 1, 2]
«Время начала»: [[08:09:54], [08:58:31], [09:39:38], [05:04:13], [05:41:13]]
«Время окончания»: [[08:28:54], [09:17:31], [09:58:38], [05:23:12], [06:00:12]]

 {'Date': {34: '10/01/2018',
35: '10/01/2018',
36: '10/01/2018',
37: '10/01/2018',
38: '10/01/2018',
39: '10/01/2018',
40: '10/01/2018',
41: '10/01/2018',
42: '10/01/2018',
661: '09/03/2018'},  

'End Time': {34: ['08:28:54'],
35: ['09:17:31'],
36: ['09:58:38'],
37: ['10:37:41'],
38: ['11:21:32'],
39: ['12:04:42'],
40: ['12:45:31'],
41: ['13:25:23'],
42: ['14:04:03'],
661: ['05:53:36']},  

'File Size (Mb)': {34: 1074.256284,
35: 1074.842244,
36: 1074.759444,
37: 1074.836956,
38: 1074.516156,
39: 1074.547044,
40: 1074.8363,
41: 1074.891492,
42: 1074.792068,
661: 1074.428204},  

'Hard Drive Name': {34: 'H5',
35: 'H5',
36: 'H5',
37: 'H5',
38: 'H5',
39: 'H5',
40: 'H5',
41: 'H5',
42: 'H5',
661: 'H5'},  

'Sensor ID': {34: '1207',
35: '1207',
36: '1207',
37: '1207',
38: '1207',
39: '1207',
40: '1207',
41: '1207',
42: '1207',
661: '1207'},  

'Sequence #': {34: 's005',
35: 's006',
36: 's007',
37: 's008',
38: 's009',
39: 's010',
40: 's011',
41: 's012',
42: 's013',
661: 's000'},  

'Site ID': {34: 'SD',
35: 'SD',
36: 'SD',
37: 'SD',
38: 'SD',
39: 'SD',
40: 'SD',
41: 'SD',
42: 'SD',
661: 'SDO'},  

'Start Time': {34: ['08:09:54'],
35: ['08:58:31'],
36: ['09:39:38'],
37: ['10:18:41'],
38: ['11:02:32'],
39: ['11:45:42'],
40: ['12:26:31'],
41: ['13:06:23'],
42: ['13:45:03'],
661: ['05:34:37']}}

1 Ответ

0 голосов
/ 02 июля 2018

Хорошо, вам нужно использовать pd.to_timedelta с аксессором .str:

Где d равно выходу df.head (10) .to_dict ():

df = pd.DataFrame(d)

df['Start Time'] = pd.to_timedelta(df['Start Time'].str[0])
df['End Time']  = pd.to_timedelta(df['End Time'].str[0])

df_out = df.groupby(['Hard Drive Name','Date','Sensor ID','Site ID'])['Sequence #',
                                                                      'File Size (Mb)',
                                                                      'Start Time',
                                                                      'End Time']\
           .agg({'Sequence #':'count',
                 'File Size (Mb)':'sum',
                 'Start Time':'min',
                 'End Time':'max'})\
           .reset_index()\
           .rename(columns={'Sequence #':'# of Files'})

Выход:

  Hard Drive Name        Date Sensor ID Site ID  # of Files  File Size (Mb) Start Time End Time
0              H5  09/03/2018      1207     SDO           1     1074.428204   05:34:37 05:53:36
1              H5  10/01/2018      1207      SD           9     9672.277988   08:09:54 14:04:03
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...