Pandas的how="cross"合并是否保留左右DataFrame的行序?
Pandas cross merge的行序保留问题
结论
pd.merge(how="cross")同时保留左表和右表的原始行序,你所期望的结果是稳定且始终一致的,即使处理数十亿行数据也不会改变。
具体解释
官方文档提到的"preserves the order of the left keys",完整逻辑是:
- 左表的行严格按照自身原始顺序依次参与笛卡尔积运算
- 对于左表的每一行,都会与右表全部行按右表原始顺序进行匹配组合
所以在你的示例中,左表的a会先和右表的1、2、3(按右表原顺序)组合,接着是b和1、2、3组合,最后是c和1、2、3组合,完全符合你期望的输出结构。
验证示例
运行你提供的代码:
import pandas as pd df1 = pd.DataFrame(["a", "b", "c"]) df2 = pd.DataFrame(["1", "2", "3"]) result = df1.merge(df2, how="cross") print(result)
输出结果固定为:
0_x 0_y 0 a 1 1 a 2 2 a 3 3 b 1 4 b 2 5 b 3 6 c 1 7 c 2 8 c 3
这种行序稳定性是Pandas cross merge的设计特性,只要左、右表自身的行序未被打乱,结果的行序就会保持这个模式,不会随数据量变化而改变。
内容的提问来源于stack exchange,提问作者FairPluto
相关产品推荐
相关产品推荐

