我有两个Pandas DataFrames,我想比较一下.例如
a b c
A na na na
B na 1 1
C na 1 na
Run Code Online (Sandbox Code Playgroud)
和
a b c
A 1 na 1
B na na na
C na 1 na
D na 1 na
Run Code Online (Sandbox Code Playgroud)
我希望在这种情况下找到共享的任何值的索引列坐标
b
C 1
Run Code Online (Sandbox Code Playgroud)
这可能吗?
如果您将keys
参数传递给concat
,则生成的数据帧的列将由跟踪原始数据帧的多索引组成:
In [1]: c=pd.concat([df,df2],axis=1,keys=['df1','df2'])
c
Out[1]:
df1 df2
a b c a b c
A na na na 1 na 1
B na 1 1 na na na
C na 1 na na 1 na
D NaN NaN NaN na 1 na
Run Code Online (Sandbox Code Playgroud)
由于底层数组现在具有相同的形状,您现在可以使用==
广播比较并将其用作掩码以返回所有匹配值:
In [171]: m=c.df1[c.df1==c.df2];m
Out[171]:
a b c
A NaN NaN NaN
B NaN NaN NaN
C NaN 1 NaN
D NaN NaN NaN
Run Code Online (Sandbox Code Playgroud)
如果您的 'na' 值实际上为零,您可以使用稀疏矩阵将其减少到匹配值的坐标(尽管您会丢失索引和列名):
import scipy.sparse as sp
print(sp.coo_matrix(m.where(m.notnull(),0)))
(2, 1) 1.0
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
72 次 |
最近记录: |