jon*_*nas 9 python dataframe pandas
我想从另一个数据帧中减去一行中的所有行.(与一行的差异)
是否有捷径可寻?(比如df-df2)
df = pd.DataFrame(abs(np.floor(np.random.rand(3, 5)*10)),
... columns=['a', 'b', 'c', 'd', 'e'])
df
Out[18]:
a b c d e
0 8 9 8 6 4
1 3 0 6 4 8
2 2 5 7 5 6
df2 = pd.DataFrame(abs(np.floor(np.random.rand(1, 5)*10)),
... columns=['a', 'b', 'c', 'd', 'e'])
df2
a b c d e
0 8 1 3 7 5
Run Code Online (Sandbox Code Playgroud)
这是一个适用于第一行的输出,但我希望其余的行也被删除...
df-df2
a b c d e
0 0 8 5 -1 -1
1 NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN
Run Code Online (Sandbox Code Playgroud)
unu*_*tbu 16
Pandas NDFrames通常尝试对具有匹配索引的项执行操作.df - df2仅在第一行执行减法,因为0索引行是唯一共享共享索引的行.
您正在寻找的操作看起来更像是使用"广播"执行的NumPy数组操作:
In [21]: df.values-df2.values
Out[21]:
array([[ 0, 8, 5, -1, -1],
[-5, -1, 3, -3, 3],
[-6, 4, 4, -2, 1]], dtype=int64)
Run Code Online (Sandbox Code Playgroud)
要将结果打包到DataFrame中:
In [22]: pd.DataFrame(df.values-df2.values, columns=df.columns)
Out[22]:
a b c d e
0 0 8 5 -1 -1
1 -5 -1 3 -3 3
2 -6 4 4 -2 1
Run Code Online (Sandbox Code Playgroud)
您也可以直接在熊猫中执行此操作.(我用过df2 = df.loc[[0]])
In [80]: df.sub(df2,fill_value=0)
Out[80]:
a b c d e
0 0 0 0 0 0
1 7 6 0 7 8
2 4 4 3 6 2
[3 rows x 5 columns]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16364 次 |
| 最近记录: |