只能比较标记相同的系列对象

时间:2019-06-27 17:10:45

标签: python pandas dataframe

我正在尝试根据两个数据框中都存在的同名列名的链接从一个数据框中获取属性。

我尝试在主数据集和子集数据帧上设置索引以使用相同的值。尝试使用“。”使用属性名称。参考或[“ name”]参考。同样,这两个数据帧的大小不同,并且没有所有相同的属性。

我收到“ ValueError”:只能比较标记相同的Series对象或“ DataFrame”对象没有属性...我尝试了以下失败的操作。

primary_df.set_index("uniqueId")
subset_df.set_index("uniqueId")
primary_df["ref_idx"] = subset_df.ref_idx.values[subset_df["uniqueId"] == primary_df["uniqueId"]]

primary_df["ref_idx"] = subset_df.ref_idx.values[subset_df.uniqueId.values == primary_df.uniqueId.values]

primary_ref_idx = subset_df.ref_idx.values[subset_df["uniqueId"] == primary_df["uniqueId"]]

primary_ref_idx = subset_df.ref_idx.values[subset_df.uniqueId.values == primary_df.uniqueId.values]

我想要实现的是(a)在subset_df中创建ref_idx的值的“ primary_ref_idx”列表,或者(b)理想地将“ ref_idx”列添加到primary_df中,并使用来自subset_df的值。我知道它将为某个primary_ref_idx留下一个“ nan”作为值,因为它不在subset_df中。没关系。

更新 以下是真实的示例,代码和数据远没有放在这里。

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)

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”:无法从重复的轴重新索引。我本以为会与“ uniqueId”或什至是“ ref_idx”值有关,但是在上面的代码示例中,我无法使用每个重复值(uniqueId = 123456)来重现该错误。

建议?

0 个答案:

没有答案