gpt4 book ai didi

python - 减去行数不相等的数据帧

转载 作者:太空宇宙 更新时间:2023-11-03 13:10:56 24 4
gpt4 key购买 nike

我有两个这样的数据框

import pandas as pd
import numpy as np

np.random.seed(0)

df1 = pd.DataFrame(np.random.randint(10, size=(5, 4)), index=list('ABCDE'), columns=list('abcd'))
df2 = pd.DataFrame(np.random.randint(10, size=(2, 4)), index=list('CE'), columns=list('abcd'))

a b c d
A 5 0 3 3
B 7 9 3 5
C 2 4 7 6
D 8 8 1 6
E 7 7 8 1

a b c d
C 5 9 8 9
E 4 3 0 3

df2 的索引始终是 df1 的索引的子集,并且列名相同。

我想创建第三个数据帧 df3 = df1 - df2。如果一个人这样做,一个人获得

     a    b    c    d
A NaN NaN NaN NaN
B NaN NaN NaN NaN
C -3.0 -5.0 -1.0 -3.0
D NaN NaN NaN NaN
E 3.0 4.0 8.0 -2.0

我不想要输出中的 NA,而是 df1 的相应值。有没有一种聪明的方法来使用例如fillnadf2 中不包含的行中使用 df1 的值?

解决方法是只减去所需的行,例如:

sub_ind = df2.index
df3 = df1.copy()
df3.loc[sub_ind, :] = df1.loc[sub_ind, :] - df2.loc[sub_ind, :]

这给了我想要的输出

   a  b  c  d
A 5 0 3 3
B 7 9 3 5
C -3 -5 -1 -3
D 8 8 1 6
E 3 4 8 -2

但也许有更直接的方法来实现这一点?

最佳答案

我想这就是你想要的:

(df1-df2).fillna(df1)

Out[40]:
a b c d
A 5.0 0.0 3.0 3.0
B 7.0 9.0 3.0 5.0
C -3.0 -5.0 -1.0 -3.0
D 8.0 8.0 1.0 6.0
E 3.0 4.0 8.0 -2.0

只需像往常一样减去数据帧,但使用括号“打包”结果并对结果运行 pandas.DataFrame.fillna 方法。或者,更详细一点:

diff = df1-df2
diff.fillna(df1, inplace=True)

关于python - 减去行数不相等的数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43720973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com