1
在下面DataFrame
,即df1
:追加一個數據幀到另一個數據框,在一個特定的多指標
In[0]: df1
Out[0]:
A B
first second
bar one 1.764052 0.400157
one 0.978738 2.240893
one 1.867558 -0.977278
two 0.950088 -0.151357
我希望多指標('bar','one')
的最後一行後追加另一DataFrame
,同時給予新增加行相同的MultiIndex。
也就是說,以下df2
:
In[1]: df2
Out[1]:
A B
first second
baz three -0.103219 0.410599
three 0.144044 1.454274
期望的結果是:
A B
first second
bar one 1.764052 0.400157
one 0.978738 2.240893
one 1.867558 -0.977278
one -0.103219 0.410599 # there 2 rows
one 0.144044 1.454274 # arrived from df2
two 0.950088 -0.151357
到目前爲止是個問題。
我的一些嘗試失敗了未來:
(1)迭代通過組(使用groupby
)和concating一個新的數據幀基於df2
值:
for idx, data in df1.groupby(level=[0,1]):
df1.loc[idx] = pd.concat([data, pd.DataFrame(df2, index=idx)], ignore_index=True)
Exception: cannot handle a non-unique multi-index!
(也試過將它們在新的DataFrame
)。
(2)reindexingdf2
priorly:
for idx, data in df1.groupby(level=[0,1]):
df2.reindex(idx)
Exception: cannot handle a non-unique multi-index!
或者:
for idx, data in df1.groupby(level=[0,1]):
df2.index = idx
break
A B
bar -0.103219 0.410599
one 0.144044 1.454274
@Merlin這些行(在與上述相同的結果)前述繼承索引值TRUE; s和'False's。 'argmax()'找到第一個'True'。 'argmin()'會找到第一個'False'。 – piRSquared
@ Merlin Ahh,我明白你的意思了。這就是爲什麼我使用'argmax()'獲取'('bar','two')'的位置。然後我在它上面插入。仍然'argmin()'不會插入底部。它會在第一個'False'上面插入,這是第一個'('bar','one')' – piRSquared
('bar','one')和argmin(),適用於我,這就是爲什麼我問 - 我沒有注意到你('酒吧','兩')。 – Merlin