gpt4 book ai didi

python - 为什么使用合并操作生成的数据帧不是 3x3 维度而不是 3x5 维度?

转载 作者:行者123 更新时间:2023-12-01 05:06:50 25 4
gpt4 key购买 nike

我按照指示http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html进行操作,但是当合并列不具有相同索引时会感到困惑。例如,d3 中的第 1 列对应于 d4 中的第 1 列。

In [92]: d4
Out[92]:
0 1
0 9 1
1 11 3
2 1 2

In [93]: d3
Out[93]:
0 1
0 2 3
1 1 9
2 3 9

In [94]: d3.merge(d4, how='left', left_on=0, right_on=1)
Out[94]:
0 0_x 1_x 0_y 1_y
0 2 2 3 1 2
1 1 1 9 9 1
2 3 3 9 11 3

我认为结果应该是

   0  1 2
0 2 3 1
1 1 9 9
2 3 9 11

编辑 1:为什么下面的合并可以创建一个精确的 3x3 DataFrame,而前者可以创建一个 3x5 DataFrame?

In [164]: d1
Out[164]:
0 1
0 1 10
1 2 5
2 3 7

In [165]: d2
Out[165]:
0 1
0 1 5
1 2 6
2 3 8

In [162]: d1.merge(d2, on=[0])
Out[162]:
0 1_x 1_y
0 1 10 5
1 2 5 6
2 3 7 8

最佳答案

在第一次合并中,您将合并列“0”上的 lhs 和列“1”上的 rhs,但没有相同的值,因此必须创建两列带有后缀的列。其余列也没有匹配项,因此您创建其他列。

在第二个示例中,您在列“0”上合并,因此您确实具有相同的值,因此不需要创建附加列,但是“1”的列名称和值仍然存在冲突,因此它必须创建带有后缀的附加列。

我认为您的困惑源于这样的期望:因为您已经指定了要合并的列,所以它将像索引一样使用这些列并将其他列与这些行进行匹配,但它不会。仅当您将这些列设置为索引时,它才会执行此操作:

In [23]:

merged = df1.set_index(keys=[1]).merge(df2.set_index(keys=[0]), left_index=True, right_index=True,how='left')
merged.index.names=['2']
merged.reset_index()
Out[23]:
2 0 1
0 1 9 9
1 3 11 9
2 2 1 3

[3 rows x 3 columns]

因此,我在这些列上设置索引,并将 left_indexright_index 参数设置为 True

但是我们必须将索引恢复为列,第一个问题是索引名称与现有列名称冲突,因此我们将其重命名。

然后我们可以调用reset_index来恢复这些值。

关于python - 为什么使用合并操作生成的数据帧不是 3x3 维度而不是 3x5 维度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24847494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com