#python #dataframe
Вопрос:
У меня есть следующее dataframe
column1 column2 0 Paul xx 1 John aa 2 Paul gg 3 John xx 4 John bb 5 George gg . . . 6 Jonathan ff
Я хочу, чтобы информация о каждом человеке была в одном ряду. На том же row
я хочу иметь то же самое index
, но в другом column
. Поэтому я хочу dataframe
вот так:
column1 column2 column3 0 Paul 0,2 xx, gg 1 John 1,3,4 aa, xx, bb 5 George 5 gg . . . n Jonathan n ff
Есть какие-нибудь идеи?
Ответ №1:
Вы можете переместить индекс в столбец с помощью .reset_index()
, затем сгруппировать по column1
и объединить в список.
df2 = df.reset_index().groupby('column1').agg(list).reset_index() df2 # returns: column1 index column2 0 George [5] [gg] 1 John [1, 3, 4] [aa, xx, bb] 2 Paul [0, 2] [xx, gg]
Чтобы изменить порядок результатов и задать индекс, как в примере, вы можете использовать:
ix = pd.Index(df2['index'].str.get(0)).rename(None) df3 = df2.set_index(ix).sort_index() df3 # returns: column1 index column2 0 Paul [0, 2] [xx, gg] 1 John [1, 3, 4] [aa, xx, bb] 5 George [5] [gg]
Комментарии:
1. возможно ли, чтобы информация была представлена так, как в первом кадре данных. Итак, сначала Пол, потом Джон, потом Джордж. Также рекомендуется ли включать значения столбца в список?
2. Конечно, смотрите мой обновленный ответ