首页 > 解决方案 > ValueError:无法从尝试在 2 个不同的集合之间复制列值的重复轴重新索引

问题描述

我正在尝试使用对两个集合都是“唯一”的公共属性来链接两个不同的集合。我已经验证该属性是唯一的(在实际数据中,而不是下面的示例)。我想使用该链接将一个集合中的值分配给未关联的另一个集合。

这是代码示例:

import pandas as pd

sub_list = [{"uniqueId": "123460", "ref_idx": 1},
            {"uniqueId": "123457", "ref_idx": 2},
            {"uniqueId": "123458", "ref_idx": 3},
            {"uniqueId": "123456", "ref_idx": 3},
            {"uniqueId": "123459", "ref_idx": 4},
            {"uniqueId": "113456", "ref_idx": 4},
            {"uniqueId": "123456", "ref_idx": 6}]

primary_list = [{"uniqueId": "123456"},
                {"uniqueId": "123457"},
                {"uniqueId": "123460"},
                {"uniqueId": "123481"},
                {"uniqueId": "123461"},
                {"uniqueId": "123462"},
                {"uniqueId": "113456"},
                {"uniqueId": "123464"},
                {"uniqueId": "123456"}]

subset_df = pd.Dataframe(sub_list)
primary_df = pd.Dataframe(primary_list)
subset_df.sort_values(by="uniqueId", inplace=True)
primary_df.sort_values(by="uniqueId", inplace=True)
primary_df.set_index("uniqueId")
subset_df.set_index("uniqueId")

print("subset_df:", subset_df)
print("primary_df:", primary_df)

primary_df["ref_idx"] = subset_df.loc[subset_df["uniqueId"].eq(primary_df["uniqueId"]), ["ref_idx"]]
print("new primary_df:", primary_df)

RESULTS:

subset_df:     ref_idx uniqueId
5        4   113456
3        3   123456
6        6   123456
1        2   123457
2        3   123458
4        4   123459
0        1   123460
primary_df:    uniqueId
7   113456
0   123456
1   123457
3   123459
2   123460
5   123461
6   123462
8   123464
4   123481
new primary_df:   uniqueId  ref_idx
7   113456      NaN
0   123456      NaN
9   123456      NaN
1   123457      2.0
3   123459      4.0
2   123460      NaN
5   123461      NaN
6   123462      NaN
8   123464      NaN
4   123481      NaN

所以这段代码部分工作。但似乎排序不会保留该行以使该ref_idx值可用于分配。的例子uniqueId = "113456"

此外,当尝试在真实数据集上运行此代码时,我得到一个"ValueError": cannot reindex from a duplicate axis. 我原以为这与值uniqueId或什至ref_idx值有关,但在上面的代码示例中,我无法在每个 ( uniqueId=123456) 中使用重复值重现该错误。我故意创建了重复项并将索引设置为uniqueId,我认为由于我的示例中有重复项,它会出错。但事实并非如此。那我错过了什么。

建议?

标签: pythonpandas

解决方案


似乎与 how="outer" 合并会将新需要的属性放在数据框中,其中那些不在 subset_df 中的行将具有空值。感谢布伦丹的想法。


推荐阅读