Pandas检查其他列中是否存在多列中的值

时间:2017-03-03 22:32:18

标签: python pandas dataframe

我正在尝试检查Dataframe" Actual"中是否注明了每一行的值。匹配Dataframe" Estimate"中同一行下的值。列位置并不重要。该值只需存在于不同数据帧之间的同一行级别上。如果需要,可以将数据帧连接/合并。 我在我的代码下面提供::

Actual=pd.DataFrame([[4,7,2,8,1],[1,5,7,9,8]], columns=['Actual1','Actual2','Actual3','Actual4','Actual5'])
estimate=pd.DataFrame([[1,2,7,9,3],[0,8,2,5,9]], columns=['estimate1','estimate2','estimate3','estimate4','estimate5'])

Actual

   Actual1  Actual2  Actual3  Actual4  Actual5
0        4        7        2        8        1
1        1        5        7        9        8

estimate

   estimate1  estimate2  estimate3  estimate4  estimate5
0          1          2          7          9          3
1          0          8          2          5          9

我尝试使用Pandas ::

for loop1 in range(1,6,1):
    for loop2 in range(1,6,1):
        Actual['want'+str(loop1)]=np.where(Actual['Actual'+ str(loop1)] == estimate['estimate' + str(loop2)],1,0)

最后,我想要的输出::

want=pd.DataFrame([[0,1,1,0,1],[0,1,0,1,1]], columns=['want1','want2','want3','want4','want5'])

want

   want1  want2  want3  want4  want5
0      0      1      1      0      1
1      0      1      0      1      1

所以,正如我之前提到的那样,因为来自Dataframe" Actual"值4在整个第一行数据帧中不存在"估计",列"想要1"已经赋值为0.再一次,考虑到Dataframe的第一行" Actual"第5列,其中value = 1,因为该值存在于数据帧的第一行#34;估计" (列位置无关紧要)列' want5'已被赋值为1.

感谢。

1 个答案:

答案 0 :(得分:2)

假设您的Actualestimate数据框中的索引相同,一种方法是apply沿isin列进行检查。

Actual.apply(lambda x: x.isin(estimate.loc[x.name]), axis=1).astype('int')

这里我们使用name属性作为两个DataFrame之间的粘合剂。

<强>演示

>>> Actual.apply(lambda x: x.isin(estimate.loc[x.name]), axis=1).astype('int')

   Actual1  Actual2  Actual3  Actual4  Actual5
0        0        1        1        0        1
1        0        1        0        1        1