gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 17:00:41 24 4
gpt4 key购买 nike

我有两个数据框

>> 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 中每一行中相似的列数code> 以这样的方式提供以下数据帧 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 - 比较 2 个数据框中的行并计算相似列的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54780189/

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