Создать новый столбец даты и времени панды - PullRequest
1 голос
/ 19 июня 2019

Вот мой df;

d = {'id':['abc','abc','abc','abc','def','def','def','ghj','ghj','ghj'],
     'Section': ['1H','2H','3H','4H','1H','2H','3H','1H','2H','3H'],
     'time':['00:00:00', '00:00:30', '00:01:00','00:01:30','00:00:00', '00:00:30', '00:01:00','00:00:00', '00:00:30', '00:01:00'],
     'A': [0.1,0.2,0.5,0.1,0.1,0.2,0.6,0.3,0.1,0.1],
     'B': [0.6,0.3,0.1,0.1,0.3,0.1,0.5,0.1,0.7,0.2]}

df = pd.DataFrame(d)

Я хотел бы создать новый столбец времени с периодом 30 секунд для каждого идентификатора.Я попробовал следующее, но я не знаю, как преобразовать вывод в столбец в df.

g = df.groupby('id')
tp = []
for idd, group in g:
    tp.append(pd.timedelta_range('0 days 0 hours 0 minutes',periods=len(group), freq='30S'))

Желаемый вывод

    A   B   Section id     tp
0   0.1 0.6   1H    abc 00:00:00
1   0.2 0.3   2H    abc 00:00:30
2   0.5 0.1   3H    abc 00:01:00
3   0.1 0.1   4H    abc 00:01:30
4   0.1 0.3   1H    def 00:00:00
5   0.2 0.1   2H    def 00:00:30
6   0.6 0.5   3H    def 00:01:00
7   0.3 0.1   1H    ghj 00:00:00
8   0.1 0.7   2H    ghj 00:00:30
9   0.1 0.2   3H    ghj 00:01:00

Любая помощь очень ценится.

1 Ответ

1 голос
/ 19 июня 2019

Используйте GroupBy.cumcount для столбца счетчика, конвертируйте в секундные интервалы времени как to_timedelta с кратным 30:

df['tp'] = pd.to_timedelta(df.groupby('id').cumcount() * 30, unit='S')
print (df)
    id Section      time    A    B       tp
0  abc      1H  00:00:00  0.1  0.6 00:00:00
1  abc      2H  00:00:30  0.2  0.3 00:00:30
2  abc      3H  00:01:00  0.5  0.1 00:01:00
3  abc      4H  00:01:30  0.1  0.1 00:01:30
4  def      1H  00:00:00  0.1  0.3 00:00:00
5  def      2H  00:00:30  0.2  0.1 00:00:30
6  def      3H  00:01:00  0.6  0.5 00:01:00
7  ghj      1H  00:00:00  0.3  0.1 00:00:00
8  ghj      2H  00:00:30  0.1  0.7 00:00:30
9  ghj      3H  00:01:00  0.1  0.2 00:01:00
...