У меня есть файл CSV с данными компании с 22 строками и 6500 столбцами. Столбцы имеют одинаковые имена, и я должен собрать столбцы с одинаковыми именами в отдельные столбцы в соответствии с их заголовками.
Теперь у меня есть данные в одном df следующим образом:
Y C Y C Y C
1. a 1. b. 1. c.
2. a. 2. b. 2. c.
и мне нужно получить это так:
Y C
1. a.
2. a.
1. b.
2. b.
1. c.
2. c.
Я бы попробовал попытку, когда вы нарезаете df на куски по итерации и объединяете их вместе, поскольку имена столбцов не могут быть четко идентифицированы.
РЕДАКТИРОВАТЬ
Измененный ответ на новый ввод:
chunksize = 2
df = (
pd.concat(
[
df.iloc[:, i:i+chunksize] for i in range(0, len(df.columns), chunksize)
]
)
.reset_index(drop=True))
print(df)
Y C
0 1 a
1 2 a
2 1 b
3 2 b
4 1 c
5 2 c
Это складывает столбцы, но оставляет «старые» столбцы во фрейме данных.
да, результат в stacked_df
. Исходный фрейм данных df
остается нетронутым. Если вы этого не хотите, просто измените имя с stacked_df
на df
, и исходный df будет перезаписан.
Я не мог удержаться от поиска решения.
Лучшее, что я нашел до сих пор, объясняет тот факт, что pd.read_csv
обращается к повторяющимся именам столбцов, добавляя «.N» к дубликатам.
In [2]: df = pd.read_csv('duplicate_columns.csv')
In [3]: df
Out[3]:
1 2 3 4 1.1 2.1 3.1 4.1 1.2 2.2 3.2 4.2
0 a q j e w e r t y u d s
1 b w w f c e f g d c s a
2 d q e h c f b f a w q r
Чтобы поместить ваши данные в тот же столбец...
In [3]: grouper = lambda l: l.split('.')[0] # peels off added suffix
In [4]: flattener = lambda v: v.stack().values # reshape groups
In [4]: pd.DataFrame(df.groupby(by=grouper, axis='columns')
...: .apply(flattener)
...: .to_dict())
Out[4]:
1 2 3 4
0 a q j e
1 w e r t
2 y u d s
3 b w w f
4 c e f g
5 d c s a
6 d q e h
7 c f b f
8 a w q r
Я бы хотел увидеть более чистое, менее тупое общее решение.
Можете ли вы предоставить какой-либо минимальный воспроизводимый пример и желаемый результат?