Объедините фреймы данных Pandas: сохраняйте избыточность строк, удаляя избыточность столбцов - PullRequest
1 голос
/ 16 октября 2019

У меня есть три фрейма данных:

df1:
col1    col2    col3
name1   human   experID1
name2   mouse   experID2
name3   human   experID3
name4   mouse   experID4
name5   human   experID5

df2:
col1    col2    col4    col6
name1   human   experID1    output1
name2   human   experID2    output2
name3   human   experID3    output3
name10  human   experID10   output4

df3:
col1    col3    col7    col8
name1   happy   human   ref1
name2   sad mouse   ref2
name3   angry   human   ref3

Я хочу объединить их:

  1. Строки в столбце 1 должны оставаться прежними, т. Е. Поскольку name1 происходитв каждом кадре данных в столбце col1 это должно происходить три раза в конечном кадре данных.

  2. Я хочу только объединить столбцы так, чтобы: если столбец уже существовал, добавить данные в этот столбец;иначе добавьте новый столбец.

  3. Заполните пропущенные ячейки с помощью '-'

Таким образом, результат будет:

col1    col2    col3    col4    col6    col7    col8
name1   human   experID1    -   -   -   -
name2   mouse   experID2    -   -   -   -
name3   human   experID3    -   -   -   -
name4   mouse   experID4    -   -   -   -
name5   human   experID5    -   -   -   -
name1   human   -   experID1    output1 -   -
name2   human   -   experID2    output2 -   -
name3   human   -   experID3    output3 -   -
name10  human   -   experID10   output4 -   -
name1   -   happy   -   -   human   ref1
name2   -   sad -   -   mouse   ref2
name3   -   angry   -   -   human   ref3

С точки зрения демонстрации того, что я пробовал: у меня есть три фрейма данных: df1, df2, df3

Пытался работать со слиянием, concat, append, говоря что-то вроде:

final_df = pd.DataFrame()
list_of_df = [df1,df2,df3]

#method 1
result = pd.concat(list_of_df)

#method 2
for each_df in list_of_dfs:
#this is where it started to go wrong

Я попробовал все методы на этой странице, но я не думаю, что они делают то, что я от них хочу (дайте мне знать, если вы хотите, чтобы я добавил код с этой страницы здесь, я просто подумал, что, поскольку это неправильно, было бы лучше указывать на ссылку).

Я думаю, что логически я думаю, что я хочу «добавить» каждый кадр данных в кадр основных данных один за другим, поэтому строкиоставайся таким же. Я просто не понимаю, как объединить столбцы без объединения строк, если кто-то может показать пример.

Ответы [ 2 ]

4 голосов
/ 16 октября 2019

Кажется, вы хотите просто добавить

df1.append(df2, sort=False).append(df3, sort=False).fillna('-')
1 голос
/ 16 октября 2019

Использование pd.concat:

pd.concat([df1,df2,df3],sort=False).fillna('-')

     col1   col2      col3       col4     col6   col7  col8
0   name1  human  experID1          -        -      -     -
1   name2  mouse  experID2          -        -      -     -
2   name3  human  experID3          -        -      -     -
3   name4  mouse  experID4          -        -      -     -
4   name5  human  experID5          -        -      -     -
0   name1  human         -   experID1  output1      -     -
1   name2  human         -   experID2  output2      -     -
2   name3  human         -   experID3  output3      -     -
3  name10  human         -  experID10  output4      -     -
0   name1      -     happy          -        -  human  ref1
1   name2      -       sad          -        -  mouse  ref2
2   name3      -     angry          -        -  human  ref3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...