Python ID группы и увеличивать связанный столбец - PullRequest
0 голосов
/ 04 июля 2018

У меня есть следующие данные во фрейме данных панд. Данные отбираются с частотой 50 кГц, поэтому поле 'microsec' должно увеличиваться для каждой группы идентификаторов на 50.

Данные ---- ID ---- микросекун

0,304 ---- 1 ---- 1530348553000
0,276 ---- 1 ---- 15303485530000
0,276 ---- 1 ---- 15303485530000
0,276 ---- 2 ---- 15303490090000
0,276 ---- 2 ---- 15303490090000
0,304 ---- 2 ---- 15303490090000
0,276 ---- 3 ---- 15303553530000
1.359 ---- 3 ---- 15303753680000
1.443 ---- 3 ---- 15303753680000

Требуется вывод

Данные ---- ID ---- микросекун

0,304 ---- 1 ---- 1530348553000
0,276 ---- 1 ---- 15303485530050
0,276 ---- 1 ---- 15303485530100
0,276 ---- 2 ---- 15303490090000
0,276 ---- 2 ---- 15303490090050
0,304 ---- 2 ---- 15303490090100
0,276 ---- 3 ---- 15303553530000
1.359 ---- 3 ---- 15303753680050
1.443 ---- 3 ---- 15303753680100

КОД

import numpy as np
from itertools import chain

lens = list(map(len, df['Data'].str.split('|')))
df['microsec'] = pd.DatetimeIndex ( df['DateTime'] ).astype ( np.int64 )// 10 ** 9

df['Data'] = df['Data'].str.replace(',','.')

res = pd.DataFrame({'ID': np.repeat(df['ID'], lens),
                    'microsec': np.repeat(df['microsec']*10000, lens),
                    'Data': list(chain.from_iterable(df['Data'].str.split('|')))    
                   })

res[['Data']] = res[['Data']].astype(float)
res.to_csv('samplefile.txt', index=False)

Что я пробовал

df_groups = res.groupby('MeasurementID')
for MeasurementID,microsec in df_groups:
     microsec = microsec*50
     print(microsec)

Но я не достиг желаемого результата. Пожалуйста, дайте мне знать, где я делаю неправильно.

1 Ответ

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

Я думаю, что код ниже должен работать.

def func(col,base):
    for i in range(len(col)):
        col.iloc[i]=col.iloc[i]+base
        base=base+50
    return col

df.groupby(['Data','ID'])['microsec'].transform(lambda x:func(x,0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...