Разделение фрейма данных на основе position в python на основе delimeter

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня есть такой фрейм данных:

 df=
users|userids
user1|1
user3|3
user1,user2|1,2
user3,user4|3,4
user1,user3|1,3
user5,user6,user2|5,6,2
user11,user12,user13,user14,user15|11,12,13,14,15

 

Теперь я хочу, чтобы фрейм данных был разделен следующим образом:

 df_modified=
user|userid
user1|1
user2|2
user3|3
user4|4
user5|5
user6|6
user11|11
user12|12
user13|13
user14|14
user15|15
 

Я пробовал

 df_modified=df.pivot(columns='users',values='userids')
 

Не работает.На самом деле значения в df имеют тип strings

Ответ №1:

Давайте используем .str.split для разделения строк в столбцах вокруг разделителя , , затем используем np.hstack для складывания разделенных строк в столбцы по горизонтали, и, наконец, создадим новый фрейм данных из этих сложенных столбцов:

 df_mod = pd.DataFrame({'users': np.hstack(df['users'].str.split(',')),
                       'userids': np.hstack(df['userids'].str.split(','))})
           .drop_duplicates('users', ignore_index=True)
 

      users userids
0    user1       1
1    user2       2
2    user3       3
3    user4       4
4    user5       5
5    user6       6
6   user11      11
7   user12      12
8   user13      13
9   user14      14
10  user15      15
 

Комментарии:

1. возникает следующая ошибка: ValueError: все массивы должны быть одинаковой длины. Отредактировал вопрос для лучшей идеи. У меня также есть элементы в df, которые не нуждаются в разделении

2. @Sam Я думаю, что это должно работать нормально даже для образца данных, предоставленных в отредактированном вопросе… Не могли бы вы, пожалуйста, перепроверить решение по данным образцам данных?

3. Мне нужно удалить drop_duplicates по какой-то причине, он показывает ошибку. Теперь это работает @Shubham

4. @Sam счастливого кодирования!