我正在寻找一种有效的方法来比较两个嵌套框,在某种程度上,只有具有不同值的行和列将保留。假设嵌套框是:
df1:
| 昵称|考试日|结果_1|结果_2| pre_result_1|
| --|--|--|--|--|
| 帕特里克|2023-01-01 2023-01-01| 1 | 10 | 123 |
| 帕特里克|2023-01-02 2023-01-02|我的天| 20 | 123 |
| 帕特里克|2023-01-03 2023-01-03| 3 | 30 | 123 |
| 帕特里克|2023-01-04 2023-01-04| 4 | 40 | 123 |
df2:
| 昵称|考试日|结果_1|结果_2| pre_result_1|
| --|--|--|--|--|
| 帕特里克|2023-01-01 2023-01-01| 1 | 10 | 123 |
| 帕特里克|2023-01-02 2023-01-02|99| 20 | 123 |
| 帕特里克|2023-01-03 2023-01-03| 3 | 30 | 123 |
| 帕特里克|2023-01-04 2023-01-04| 4 | 40 | 123 |
它们之间有一个区别,在第2行,列:result_1到目前为止,我想出了:
pets_diff = df1.merge(
df2,
indicator=True,
how="outer",
)
pets_diff = pets_diff[lambda x: x["_merge"] != "both"]
字符串
这将删除所有匹配的行,只留下那些有差异的行,如下所示:
| 昵称|考试日|结果_1|结果_2| pre_result_1|_合并|
| --|--|--|--|--|--|
| 帕特里克酒店|2023-01-02 -02 - 01|我的天| 20 | 123 |left_only|
| 帕特里克酒店|2023-01-02 -02 - 01|99| 20 | 123 |仅右|
最后我想用下面的框架来结束:
| 昵称|考试日|结果_1|
| --|--|--|
| 帕特里克酒店|2023-01-02 -02 - 01|我的天|
| 帕特里克酒店|2023-01-02 -02 - 01|99|
注意,所有具有相同值的行和列都消失了。我想保留dimension
列:pet_name和exam_day,并删除所有具有匹配值的其他列。请注意,有300多个列可能具有不同的值和名称(result_1,result_2,pre_result_1,post_exam_33等)。
2条答案
按热度按时间mum43rcc1#
使用
DataFrame.compare
:字符串
详情:
型
643ylb082#
另一种可能的解决方案,基于
numpy
和pd.concat
:字符串
输出量:
型