熊猫:减去两个数据帧时的所有 NaN

ale*_*e19 5 python dataframe pandas

我有两个系列。我想从另一个数据帧中减去一个数据帧,即使它们的列数不同。

>df1

index   0   1   2    3    4    5
TOTAL   5  46  56  110  185  629

>df2 
index   1   2   3    4    5
Use     25  37  86  151  512
Run Code Online (Sandbox Code Playgroud)

我假设减去具有不同维度的两个数据框只会导致不匹配的列(在这种情况下,列 0)中出现 NaN。其余列将是 df1[1]-df2[1]、df1[2]-df2[2] 等的结果。

>df1 - df2
index   0    1   2   3   4   5
TOTAL   NaN  21  19  24  34  117
Run Code Online (Sandbox Code Playgroud)

但这种情况并非如此。当我减去数据帧时会发生这种情况?

>df1 - df2
index   0   1   2   3   4   5
Use     NaN NaN NaN NaN NaN NaN
TOTAL   NaN NaN NaN NaN NaN NaN
Run Code Online (Sandbox Code Playgroud)

我也试过只减去这些值:

>df1.values - df2.values
Traceback (most recent call last):

  File "<ipython-input-376-1dc5b3b4ad3e>", line 1, in <module>
    total_drugs.values-(restraints_drugs.values+norestraints_drugs.values)

ValueError: operands could not be broadcast together with shapes (1,6) (1,5) 
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我正在使用熊猫 0.18。

piR*_*red 7

您正在减去两个数据帧。 索引和行索引必须匹配。在您的情况下,行索引TOTALUse不匹配。

df2.ix['Use']为了得到你正在寻找的东西,你想从中减去该系列df1

df1.sub(df2.squeeze())
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

或者:

df1.sub(df2.ix['Use'])
Run Code Online (Sandbox Code Playgroud)

或者:

df1.sub(df2.loc['Use'])
Run Code Online (Sandbox Code Playgroud)

或者:

df1 - df2.ix['Use']
Run Code Online (Sandbox Code Playgroud)

或者:

df1 - df2.loc['Use']
Run Code Online (Sandbox Code Playgroud)