并排輸出兩個Pandas數(shù)據(jù)幀的差異 - 突出顯示差異我試圖突出顯示兩個數(shù)據(jù)幀之間的確切變化。假設(shè)我有兩個Python Pandas數(shù)據(jù)幀:"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我的目標(biāo)是輸出一個HTML表:標(biāo)識已更改的行(可以是int,float,boolean,string)輸出具有相同,OLD和NEW值的行(理想情況下輸入到HTML表中),以便消費(fèi)者可以清楚地看到兩個數(shù)據(jù)幀之間發(fā)生了哪些變化:"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 回答

慕桂英3389331
TA貢獻(xiàn)2036條經(jīng)驗 獲得超8個贊
第一部分類似于Constantine,你可以得到哪些行為空的布爾值*:
In [21]: ne = (df1 != df2).any(1)In [22]: neOut[22]:0 False1 True2 Truedtype: bool
然后我們可以看到哪些條目已更改:
In [23]: ne_stacked = (df1 != df2).stack()In [24]: changed = ne_stacked[ne_stacked]In [25]: changed.index.names = ['id', 'col']In [26]: changedOut[26]:id col1 score True2 isEnrolled True Comment Truedtype: 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 col1 score 1.11 1.212 isEnrolled True False Comment None On vacation
*注:這一點(diǎn)很重要df1
,并df2
在這里分享相同的索引。為了克服這種歧義,您可以確保只使用共享標(biāo)簽df1.index & df2.index
,但我想我會將其作為練習(xí)。
添加回答
舉報
0/150
提交
取消