数据合并熊猫

问题描述 投票:1回答:1

我正在不同的计算机上运行一些pcmark测试。最后,我要合并机器结果。我已经修改了要显示的最终结果。我已经尝试过使用熊猫进行不同形式的合并,但是我无法获得预期的结果,但这已经足够接近了。任何建议,将不胜感激

来自机器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 =“ outer”,indicator = True)

python pandas dataframe merge merging-data
1个回答
0
投票

根据您的情况,在Test CaseSubTest上合并,然后使用ffillbfill创建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
© www.soinside.com 2019 - 2024. All rights reserved.