Pandas объединени и смещение столбцов
Имею df следующего формата:
A | B
A1 A2 | A1 A2 A3
0 099 54135 099 54135 INE
Просьба, подсказать, как можно объединить колонки А1 и привести к подобному формату:
A | B
A1 | A2 | A2 A3
099| 54135 54135 INE
соответственно df может содержать колонки C, D и т.п. нужно объединять колонки А1 в одну колонку и смещать в лево. Спасибо!
данный дф формируется из словаря
l = [
{'A':{'A1': '099', 'A2': '54135'}},
{'B':{'A1': '099', 'A2': '54135', 'A3': 'INE'}}
]
df = pd.DataFrame(l)
res = pd.concat([df[x].apply(pd.Series).
dropna(how="all").reset_index(drop=True) for x in df.columns],
axis=1, keys=df.columns).dropna(how="all", axis=1)
Ответы (1 шт):
Автор решения: Andrey
→ Ссылка
Я подумал, что можно сделать следующим образом:
- Разбить датафрейм на группы A, B, C и т.д.
- Для каждой группы установить колонку A1 в качестве индекса.
- Объединить все датафреймы в один. Колонка A1 станет общим индексом.
In [3]: df
Out[3]:
A B C D
A1 A2 A1 A2 A3 A1 A4 A5 A1 A6 A7
0 099 54135 099 33 INE 099 236 INE 099 44223 INE
In [4]: pd.concat([group
...: .set_index((name, 'A1'))
...: .rename_axis(index={(name, 'A1'): 'A1'})
...: for name, group in df.groupby(level=0, axis='columns')],
...: axis='columns')
Out[4]:
A B C D
A2 A2 A3 A4 A5 A6 A7
A1
099 54135 33 INE 236 INE 44223 INE