Добавить столбец из нескольких файлов в цикле
У меня есть несколько папок из которых я считываю циклом файлы, создаю в них столбец name и count Столбец name в каждом файле состоит из части значений из столбца name в ещё одном файле считанным в df. Во всех файлах значения name различны. Мне нужно по этим значениям добавить столбец count из каждого файла в df.
Для примера у меня есть две такие таблицы:
| id | name | count |
|---|---|---|
| a | 48/a | 2 |
| c | 48/c | 5 |
| id | name | count |
|---|---|---|
| a | 50/a | 5 |
| b | 50/b | 6 |
| d | 50/d | 6 |
Нужно получить такую таблицу добавлением из двух предыдущих значения count в изначальную таблицу df
| name | count |
|---|---|
| 48/a | 2 |
| 48/b | |
| 48/c | 5 |
| 50/a | 5 |
| 50/b | 6 |
| 50/c | |
| 50/d | 6 |
Код
for i in range(len(file)) :
obj = pd.read_csv(file[i])
obj['count'] = obj.groupby('id')['id'].transform('count')
for j in range(obj.shape[0]):
obj['name'][j] = str(file[i])+'/'+str(obj['id'][j])
obj.to_csv('frame'+str(i)+'.csv')
df = df.merge(obj[['name','count']], on = 'link', how = 'outer' )
Но мой код мне выдает подобную таблицу:
| name | count_x | count_y |
|---|---|---|
| 48/a | 2 | |
| 48/b | ||
| 48/c | 5 | |
| 50/a | 5 | |
| 50/b | 6 | |
| 50/c | ||
| 50/d | 6 |
Как можно переписать, чтоб все добавлялось в один столбец?
Ответы (1 шт):
а что мешает установить новый индекс и сделать простую конкатенацию?
df1 = df1.set_index("name")
df2 = df2.set_index("name")
res = pd.concat([df1, df2])
res:
id count
name
48/a a 2
48/c c 5
50/a a 5
50/b b 6
50/d d 6
Ненужные колонки можно убрать, и, если есть желание, сделать reset_index()
UPDATE
Если количество колонок может разнится, но нужные вам колонки везде имеют одно и то же имя и значения в колонке name уникальны, то можно попробовать так:
res1 = pd.merge(res1[['name', 'count']], df2[['name', 'count']], how="outer")
res1:
name count
0 48/a 2
1 48/c 5
2 50/a 5
3 50/b 6
4 50/d 6