Объедините несколько строк в информационном фрейме pandas и создайте новые столбцы - PullRequest
1 голос
/ 10 мая 2019

У меня в столбце данных динамическое количество столбцов для каждой строки, и одна запись может занимать более 1 строки. Первые 2 столбца являются ключевыми столбцами. Если ключевые столбцы совпадают, я должен добавить каждую строку данных в одну строку и создать столько столбцов, сколько требуется для добавления.

Ввод ниже (фрейм данных) c1 в столбце c2 в столбце и т. Д. *

row 1: A 1 c1 c2 c3.. c20
row 2: A 1 c21....c25
row 3. A 1 c26.... c35
row 4: A 2 d1 d2... d21
row 5: A 2 d22....d27

Я попытался использовать df.groupby (___ первые 2 имени столбца ____). First (). Reset_index (), который возвращает только первую строку, так как мы используем first (). Есть ли какая-либо функция, чтобы сделать это в Python

Требуется вывод: (фрейм данных)

row 1: A 1 c1 c2...c35 (each value in 1 column)
row 2: A 2 d1...d27 (each value in 1 column)

1 Ответ

1 голос
/ 10 мая 2019

Используйте GroupBy.cumcount для серии счетчиков, затем DataFrame.set_index, DataFrame.sort_index и последнее выравнивание MultiIndex в понимании списка:

print (df)
       a  b    c    d    e    f
row1:  A  1   c1   c2   c3  c20
row2:  A  1  c21  c22  c23  c24
row3.  A  1  c26  c27  c28  c29
row4:  A  2   d1   d2  d21  d22
row5:  A  2  d22  d27  d28  d29

s = df.groupby(['a','b']).cumcount()

df1 = df.set_index(['a', 'b', s]).unstack().sort_index(level=1, axis=1)
df1.columns = [f'{x}{y}' for x, y in df1.columns]
df1 = df1.reset_index()
print (df1)
   a  b  c0  d0   e0   f0   c1   d1   e1   f1   c2   d2   e2   f2
0  A  1  c1  c2   c3  c20  c21  c22  c23  c24  c26  c27  c28  c29
1  A  2  d1  d2  d21  d22  d22  d27  d28  d29  NaN  NaN  NaN  NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...