我想用另一个数据框中的一行减去一个数据框中的所有行。 (与一行的不同)

有没有简单的方法来做到这一点?像 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 

这是适用于第一行的输出,但我希望剩余的行也被减去......

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 

请您参考如下方法:

Pandas NDFrame 通常尝试对具有匹配索引的项目执行操作。 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) 

将结果打包到 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 


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!