设A和B为两个 Dataframe 列:
| 你好|Foo|嘿|酒吧|世界|
| --|--|--|--|--|
| 你好|酒吧|Doo|世界|星星|
| --|--|--|--|--|
我想获得一个dataframe C的列,它包含了所有的唯一列,但是列的顺序必须和以前一样。
| 你好|Foo|酒吧|嘿|Doo|世界|星星|
| --|--|--|--|--|--|--|
换句话说:如果A是一个较旧版本的 Dataframe ,B是一个较新版本的 Dataframe ,如何得到一个 Dataframe C,它以一种与A(或B)保持一致的顺序的方式跟踪A删除的列(不存在于B中)和B添加的列(不存在于A中)?“.
方法align可以混合两个数据框列,但它不保留原始顺序,顺序是字典顺序。
3条答案
按热度按时间ee7vknir1#
假设你真的想在两个索引中保持原来的顺序(并假设没有循环模式),你可以使用下面的算法:
输出量:
通用解决方案
或者,您可以使用图论,使用
networkx.from_edgelist
和itertools.pairwise
构建一个有向图,其中所有连续列对都是边,然后使用dag_longest_path
找到最长路径:输出量:
图表:
yh2wf1be2#
我会把它简化为一个列表解析问题。首先获取列列表:
然后应用您的匹配逻辑:
然后,您可以通过执行
C.columns = c_cols
来重新排序C
Dataframe 。ikfrs5lh3#