在具有重复索引的数据帧之间进行向量化计算时,熊猫保持索引顺序

时间:2019-03-04 14:18:40

标签: pandas

如果我有两个DataFramedf1df2)具有匹配的索引,则在Series时将对得到的df1["column"].subtract(df2["column"])进行排序。

只要df1.index不包含重复项,我们就可以使用reindex。但是,如果索引包含重复项,有什么办法可以保持索引在df1中的顺序? (我们不想遍历行,所以这不是一个选择)

示例:

df1 = pd.DataFrame({'identifier': list("ababc"), 
                    'column': [1, 2, 3, 4, 5]}).set_index('identifier')

df2 = pd.DataFrame({'identifier': list("ac"),
                    'column': [2, 3]}).set_index('identifier')

df1['column'].subtract(df2["column"])

identifier
a   -1.0
a    1.0
b    NaN
b    NaN
c    2.0

df1['column'].subtract(df2["column"]).reindex(df1.index)
ValueError: cannot reindex from a duplicate axis

预期输出:

identifier
a    -1.0
b    NaN
a    1.0
b    NaN
c    2.0

2 个答案:

答案 0 :(得分:1)

您可以通过分配嵌套列表或将参数MultiIndex添加到DataFrame.set_index来创建助手append=True,然后按第二级减去并最后删除第一级助手:

df1.index = [np.arange(len(df1)), df1.index]
s = df1['column'].subtract(df2["column"], level=1).reset_index(level=0, drop=True)
print (s)
identifier
a   -1.0
b    NaN
a    1.0
b    NaN
c    2.0
Name: column, dtype: float64

或者:

df1 = pd.DataFrame({'identifier': list("ababc"), 
                    'column': [1, 2, 3, 4, 5]}).set_index('identifier', append=True)

s = df1['column'].subtract(df2["column"], level=1).reset_index(level=0, drop=True)

答案 1 :(得分:1)

插入在线使用ng-repeatjoin新密钥

assign