簡體   English   中英

組合兩個數據框並顯示它們的差異-Python Pandas

[英]Combining two data frames and showing their difference - Python Pandas

我有兩個將從CSV文件中提取的數據框:

   X     Value 1  Value 2
0  1     2        1      
1  3     4       -2      
2  3     3        8      
3 -1     4        2      
4  6    -8        2      
5  0     10       1

   X     Value 1  Value 2
0  1     2        1      
1  3     4       -1      
2  3     4        8      
3 -1     4        2      
4  6    -8        2      
5  0     9        1 

我想使用Python Pandas獲得這樣的輸出,它將是第二個數據幀,但是對於任何已更改的值,括號中的值將通過以下方式加/減:

   X     Value 1  Value 2
0  1     2        1      
1  3     4       -1 (+1)     
2  3     4 (+1)   8      
3 -1     4        2      
4  6    -8        2      
5  0     9 (-1)  1 

我發現在網上發現與Panels一起使用的解決方案的唯一方法已被棄用,因此我想避免使用它們。 另外,我希望最終輸出是一個數據框,以便可以對其應用樣式。

您可以applymap subapplymap一起使用,最后add轉換為string s的原始df2

  • 如果兩個DataFrame的長度相同
  • 如果兩個DataFrames的索引值相同
  • 如果兩個DataFrames列名稱相同

df = df2.sub(df1).applymap(lambda x: ' ({0:+d})'.format(x) if x != 0 else '')
print (df)
  X Value 1 Value 2
0                  
1              (+1)
2      (+1)        
3                  
4                  
5      (-1) 

df3 = df2.astype(str).add(df)
print (df3)
   X Value 1  Value 2
0  1       2        1
1  3       4  -1 (+1)
2  3  4 (+1)        8
3 -1       4        2
4  6      -8        2
5  0  9 (-1)        1

您可以得到df2和df1之間的差異,並創建+或-標志,然后將此附加到df2。

df2.astype(str) + \
(df2-df1).applymap(lambda x: ' ({}{})'\
                   .format('+' if x > 0 else '', str(x)).replace('(0)',''))

Out[240]: 
     X Value 1  Value 2
0   1       2        1 
1   3       4   -1 (+1)
2   3   4 (+1)       8 
3  -1       4        2 
4   6      -8        2 
5   0   9 (-1)       1     

沒有格式化技巧:

(df2.astype(str)+"("+(df2-df1).astype(str)+")").applymap(
lambda s:s.replace("(0)","").replace("(","(+").replace("+-","-"))

為:

    X Value1  Value2
0   1      2       1
1   3      4  -1(+1)
2   3  4(+1)       8
3  -1      4       2
4   6     -8       2
5   0  9(-1)       1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM