[解決済み】2つのDataFrameを比較し、その差分を並べて出力する。
2022-04-10 09:13:23
質問
2つのデータフレームの間で何が変更されたかを正確に強調表示しようとしています。
Python Pandasのデータフレームが2つあるとします。
"StudentRoster Jan-1":
id Name score isEnrolled Comment
111 Jack 2.17 True He was late to class
112 Nick 1.11 False Graduated
113 Zoe 4.12 True
"StudentRoster Jan-2":
id Name score isEnrolled Comment
111 Jack 2.17 True He was late to class
112 Nick 1.21 False Graduated
113 Zoe 4.12 False On vacation
私の目標は、次のようなHTMLテーブルを出力することです。
- 変更のあった行を特定する(int、float、boolean、stringのいずれでも可)
-
同じ値、OLD値、NEW値を持つ行を出力し(理想的にはHTMLテーブルに)、消費者が2つのデータフレーム間で何が変わったかを明確に分かるようにします。
"StudentRoster Difference Jan-1 - Jan-2": id Name score isEnrolled Comment 112 Nick was 1.11| now 1.21 False Graduated 113 Zoe 4.12 was True | now False was "" | now "On vacation"
行単位、列単位で比較すればいいのでしょうが、もっと簡単な方法はないのでしょうか?
どのように解決するのですか?
最初の部分は、Constantineと同様に、どの行が空なのかをブール値で取得できます*。
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
ここでは、最初の項目がインデックスで、2番目の項目が変更されたカラムである。
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
しかし、それは練習として残しておこうと思う。
関連
-
Python入門 openを使ったファイルの読み書きの方法
-
PythonでECDSAを実装する方法 知っていますか?
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み] urllib、urllib2、urllib3、requestsモジュールの違いは何ですか?
-
[解決済み] シェルコマンドの実行と出力のキャプチャ
-
[解決済み] distribute, distutils, setuptools, distutils2 の違い?
-
[解決済み】type()とisinstance()の違いは何ですか?)
-
[解決済み】インデックスで2つのデータフレームをマージする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピロウズ画像色処理の具体的な活用方法
-
PicgoのイメージベッドツールをPythonで実装する
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
任意波形を生成してtxtで保存するためのPython実装
-
風力制御におけるKS原理を深く理解するためのpythonアルゴリズム
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。