Ваш метод будет работать (я думаю), если вы будете использовать df['column_of_interest'] = df['column_of_interest'].str.rstrip('/')
, так как он избавит от этого раздражающего /
в конце ваших наблюдений. Однако этот цикл неэффективен, и способ, которым вы его используете, требует, чтобы вы знали, сколько наблюдений у вас максимально в вашем столбце. Вот еще один способ, который, я думаю, достигает того, что вам нужно:
Возьмите этот пример df
:
df = pd.DataFrame({'column_of_interest':['onething/',
'onething/twothings/',
'onething/twothings/threethings/'],
'values1': [1,2,3],
'values2': [5,6,7]})
>>> df
column_of_interest values1 values2
0 onething/ 1 5
1 onething/twothings/ 2 6
2 onething/twothings/threethings/ 3 7
Это немного запутанно, потому что вы хотите сохранить данные в столбцах за пределами column_of_interest
. Таким образом, вы можете временно найти их и отбросить в сторону, используя:
value_columns = [i for i in df.columns if i != 'column_of_interest']
И поместите их в указатель для следующей манипуляции (которая восстанавливает их в конце):
new_df = (df.set_index(value_columns)
.column_of_interest.str.rstrip('/')
.str.split('/')
.apply(pd.Series)
.stack()
.rename('new_column_of_interest')
.reset_index(value_columns))
А ваш new_df
тогда выглядит так:
>>> new_df
values1 values2 new_column_of_interest
0 1 5 onething
0 2 6 onething
1 2 6 twothings
0 3 7 onething
1 3 7 twothings
2 3 7 threethings
Или, альтернативно, используя merge
:
new_df = (df[value_columns].merge(df.column_of_interest
.str.rstrip('/')
.str.split('/')
.apply(pd.Series)
.stack()
.reset_index(1, drop=True)
.to_frame('new_column_of_interest'),
left_index=True, right_index=True))
РЕДАКТИРОВАТЬ: На размещенном вами кадре данных это приводит к:
ID Date Name ColA ColB ColC ColD new_column_of_interest
0 1 09/12 Ann String String String String OneThing
0 2 09/13 Pete String String String String OneThing
1 2 09/13 Pete String String String String AnotherThing
0 3 09/13 Ann String String String String OneThing
1 3 09/13 Ann String String String String AnotherThing
2 3 09/13 Ann String String String String ThirdThing
0 4 09/12 Pete String String String String OneThing