Слияние данных Pandas - PullRequest
       0

Слияние данных Pandas

1 голос
/ 17 марта 2020

Я провел несколько тестов pcmark на разных машинах. В конце я хочу закрепить результаты машины. Я изменил конечный результат для отображения. Я пробовал разные формы слияния, используя pandas, но я не смог получить ожидаемый результат, но это было достаточно близко. Любые предложения будут оценены

Кадр данных с машины 1:

|------------|---------------------------|--------------|------------|  
|Test Case   | SubTest                   | App          | Count      |  
|------------|---------------------------|--------------|------------|   
|pcmark10    | AppStartUp                | NaN          | NaN        |  
|pcmark10    | PhotoEditing              | NaN          | NaN        |  
|pcmark10    | RenderingAndVisualization | NaN          | NaN        |  
|pcmark10    | Spreadsheet               | soffice.bin  | 1.0        |  
|pcmark10    | VideoConferencing         | NaN          | NaN        |  
|pcmark10    | VideoEditing              | NaN          | NaN        |  
|pcmark10    | WebBrowsing               | NaN          | NaN        |  
|pcmark10    | Writing                   | NaN          | NaN        |  
|------------|---------------------------|--------------|------------|  

Кадр данных с машины 2:

|------------|---------------------------|--------------|------------|  
|Test Case   | SubTest                   | App          | Count      |  
|------------|---------------------------|--------------|------------|   
|pcmark10    | AppStartUp                | NaN          | NaN        |  
|pcmark10    | PhotoEditing              | NaN          | NaN        |  
|pcmark10    | RenderingAndVisualization | NaN          | NaN        |  
|pcmark10    | Spreadsheet               | NaN          | NaN        |  
|pcmark10    | VideoConferencing         | NaN          | NaN        |  
|pcmark10    | VideoEditing              | NaN          | NaN        |  
|pcmark10    | WebBrowsing               | chrome.exe   | 2          |  
|pcmark10    | Writing                   | NaN          | NaN        |  
|------------|---------------------------|--------------|------------|  

Я хочу, чтобы результат выглядел так:

|------------|---------------------------|--------------|------------|------------|  
|Test Case   | SubTest                   | App          | Count_x    | Count_y    |
|------------|---------------------------|--------------|------------|------------|
|pcmark10    | AppStartUp                | NaN          | NaN        | NaN        |  
|pcmark10    | PhotoEditing              | NaN          | NaN        | NaN        |  
|pcmark10    | RenderingAndVisualization | NaN          | NaN        | NaN        |  
|pcmark10    | Spreadsheet               | soffice.bin  | 1.0        | NaN        |  
|pcmark10    | VideoConferencing         | NaN          | NaN        | NaN        |  
|pcmark10    | VideoEditing              | NaN          | NaN        | NaN        |    
|pcmark10    | WebBrowsing               | chrome.exe   | NaN        | 2          |  
|pcmark10    | Writing                   | NaN          | NaN        | NaN        |  
|------------|---------------------------|--------------|------------|------------|  

Я попробовал внешнее слияние, объединяющее все ключи, вот что я получил. Используя внешнюю функцию, передайте значение строки pcmark10 с просмотром веб-страниц как пустым. Chrome отсутствует в столбце приложения.

|------------|---------------------------|--------------|------------|------------|  
|Test Case   | SubTest                   | App          | Count_x    | Count_y    |
|------------|---------------------------|--------------|------------|------------|
|pcmark10    | AppStartUp                | NaN          | NaN        | NaN        |  
|pcmark10    | PhotoEditing              | NaN          | NaN        | NaN        |  
|pcmark10    | RenderingAndVisualization | NaN          | NaN        | NaN        |  
|pcmark10    | Spreadsheet               | soffice.bin  | 1.0        | NaN        |  
|pcmark10    | VideoConferencing         | NaN          | NaN        | NaN        |  
|pcmark10    | VideoEditing              | NaN          | NaN        | NaN        |    
|pcmark10    | WebBrowsing               | NaN          | NaN        | 2          |  
|pcmark10    | Writing                   | NaN          | NaN        | NaN        |  
|------------|---------------------------|--------------|------------|------------|  

Команда слияния: - pd.merge (df1, df2, on = ['Test Case', 'SubTest', 'App'], how = "внешний", индикатор = True)

1 Ответ

0 голосов
/ 17 марта 2020

В вашем случае объедините Test Case и SubTest, затем используйте ffill или bfill для создания App:

(df1.merge(df2, on=['Test Case', 'SubTest'])
    .assign(App=lambda x: x.filter(like='App').bfill(1).iloc[:,0])
    .drop(['App_x','App_y'], axis=1)
)

Вывод:

  Test Case                    SubTest  Count_x  Count_y          App
0  pcmark10                 AppStartUp      NaN      NaN          NaN
1  pcmark10               PhotoEditing      NaN      NaN          NaN
2  pcmark10  RenderingAndVisualization      NaN      NaN          NaN
3  pcmark10                Spreadsheet      1.0      NaN  soffice.bin
4  pcmark10          VideoConferencing      NaN      NaN          NaN
5  pcmark10               VideoEditing      NaN      NaN          NaN
6  pcmark10                WebBrowsing      NaN      2.0   chrome.exe
7  pcmark10                    Writing      NaN      NaN          NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...