亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

比較兩個DataFrame并并排輸出它們的差異

比較兩個DataFrame并并排輸出它們的差異

楊__羊羊 2021-03-31 00:15:57
我試圖突出顯示兩個數據框之間到底發生了什么變化。假設我有兩個Python Pandas數據框:"StudentRoster Jan-1":id   Name   score                    isEnrolled           Comment111  Jack   2.17                     True                 He was late to class112  Nick   1.11                     False                Graduated113  Zoe    4.12                     True       "StudentRoster Jan-2":id   Name   score                    isEnrolled           Comment111  Jack   2.17                     True                 He was late to class112  Nick   1.21                     False                Graduated113  Zoe    4.12                     False                On vacation我的目標是輸出一個HTML表,該表:標識已更改的行(可以是int,float,boolean,string)輸出具有相同,OLD和NEW值的行(理想情況下將其輸出到HTML表中),以便使用者可以清楚地看到兩個數據框之間的變化:"StudentRoster Difference Jan-1 - Jan-2":  id   Name   score                    isEnrolled           Comment112  Nick   was 1.11| now 1.21       False                Graduated113  Zoe    4.12                     was True | now False was "" | now   "On   vacation"我想我可以逐行和逐列進行比較,但是有沒有更簡單的方法?
查看完整描述

3 回答

?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

第一部分類似于君士坦丁,您可以獲取其中的行為空的布爾值*:


In [21]: ne = (df1 != df2).any(1)


In [22]: ne

Out[22]:

0    False

1     True

2     True

dtype: bool

然后,我們可以查看哪些條目已更改:


In [23]: ne_stacked = (df1 != df2).stack()


In [24]: changed = ne_stacked[ne_stacked]


In [25]: changed.index.names = ['id', 'col']


In [26]: changed

Out[26]:

id  col

1   score         True

2   isEnrolled    True

    Comment       True

dtype: bool

在這里,第一個條目是索引,第二個條目是已更改的列。


In [27]: difference_locations = np.where(df1 != df2)


In [28]: changed_from = df1.values[difference_locations]


In [29]: changed_to = df2.values[difference_locations]


In [30]: pd.DataFrame({'from': changed_from, 'to': changed_to}, index=changed.index)

Out[30]:

               from           to

id col

1  score       1.11         1.21

2  isEnrolled  True        False

   Comment     None  On vacation

*注:這是非常重要的df1,并df2在這里分享相同的索引。為了克服這種歧義,您可以確保僅使用來查看共享標簽df1.index & df2.index,但我想將其保留為練習。


查看完整回答
反對 回復 2021-04-01
  • 3 回答
  • 0 關注
  • 603 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號