python-比较2个数据框中的行并计算相似列的数量

前端之家收集整理的这篇文章主要介绍了python-比较2个数据框中的行并计算相似列的数量 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有两个数据框

>> df1
ID  Hair  Legs  Feathers
 1    1     0      0
 2    1     2      1
 3    0     2      1

>> df2
ID  Hair  Legs  Feathers
21   1      2     0
22   1      0     1

我想将df2中的每一行与df1中的所有行进行比较,并以这样的方式计算df2的每一行中相似的列数,即得出以下数据帧df3

>> df3
ID    Hair  Legs  Feathers  Count
1-21   1      2      0        2
2-21   1      2      0        2
3-12   1      2      0        1
1-22   1      0      1        2
2-22   1      0      1        2
3-22   1      0      1        1

计算Count的方式是将df2的第一行与df1的第一行进行比较,并计算相似列的数量.类似地,在df2的第一行与df1的第二行之间,依此类推.此外,将第二行df2与df1的所有行一一比较,并存储在另一个数据帧df3中.

任何帮助将不胜感激

最佳答案
我相信您需要:

#cross join between both DataFrames
df = df2.assign(A=1).merge(df1.assign(A=1),on='A',suffixes=('','_')).drop('A',axis=1)
#join ID columns and set index
df.index = df.pop('ID_').astype(str) + '_' + df.pop('ID').astype(str)
df.index.name='ID'
print (df)
      Hair  Legs  Feathers  Hair_  Legs_  Feathers_
ID                                                 
1_21     1     2         0      1      0          0
2_21     1     2         0      1      2          1
3_21     1     2         0      0      2          1
1_22     1     0         1      1      0          0
2_22     1     0         1      1      2          1
3_22     1     0         1      0      2          1
cols = df.filter(regex='_$').columns
#compare rows for match and count True values by sum
df['count'] = df[cols.str[:-1]].eq(df[cols].rename(columns=lambda x: x[:-1])).sum(axis=1)

df = df.drop(cols,axis=1).reset_index()
print (df)
     ID  Hair  Legs  Feathers  count
0  1_21     1     2         0      2
1  2_21     1     2         0      2
2  3_21     1     2         0      1
3  1_22     1     0         1      2
4  2_22     1     0         1      2
5  3_22     1     0         1      1

猜你在找的Python相关文章