python - 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
,我认为由于我的示例中有重复项,它会出错。但事实并非如此。那我错过了什么。
建议?
解决方案
似乎与 how="outer" 合并会将新需要的属性放在数据框中,其中那些不在 subset_df 中的行将具有空值。感谢布伦丹的想法。
推荐阅读
- python - 当我在 pygame 中打印某些内容时,一个错误消失了
- sql - 存储过程中 else 附近的语法不正确
- java - Freemarker 模板货币符号编码问题
- actions-on-google - Google Home 报告状态请求正在运行但未显示预期结果?
- c - 将内存分配给结构数组的指针
- python - 如何删除 Panda DataFrame 中的行?
- javascript - Javascript DOM 中的向上横向
- java - 如何在继续之前等待非空返回
- node.js - 我的 API 可以在没有 passport.authenticate 的情况下正常工作,但是有了它,它会给出错误 Cannot set headers after they are sent to the client
- java - 从 JavaFX 选项卡内的字段中获取数据