如果我有两个DataFrame
(df1
和df2
)具有匹配的索引,则在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
答案 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-repeat
和join
新密钥
assign