Используйте Series.str.extract
для числовых значений, несколько часов по 60
, суммируйте вместе по Series.add
, преобразуйте в целые числа, строки и последнее добавление m
:
h = df['Col_name'].str.extract('(\d+)h', expand=False).astype(float) * 60
m = df['Col_name'].str.extract('(\d+)m', expand=False).astype(float)
df['new'] = h.add(m, fill_value=0).astype(int).astype(str) + 'm'
Еще одно решение, спасибо @ anky_91:
df['new1'] = (pd.to_timedelta(df['Col_name']).dt.seconds // 60).astype(str) + 'm'
print (df)
Col_name new new1
0 2h 50m 170m 170m
1 8h 35m 515m 515m
2 19h 1140m 1140m
Но если позже потребуется обработка этих данных функциями datetime, возможно преобразовать их в timedeltas:
df['timedelta'] = pd.to_timedelta(df['Col_name'])
print (df)
Col_name new new1 timedelta
0 2h 50m 170m 170m 02:50:00
1 8h 35m 515m 515m 08:35:00
2 19h 1140m 1140m 19:00:00