我有两个数据框
>> 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。