如何比较两个不同数据框中的两列并计算出现次数

考虑以下两个数据框:

dic_1 = {'intA': {0: 'A', 1: 'B', 2: 'A', 3: 'D', 4: 'A', 5: 'F', 6: 'C', 7: 'H', 8: 'D', 9: 'X', 10: 'A', 11: 'C', 12: 'X'}, 'intB': {0: 'FG', 1: 'GH', 2: 'SD', 3: 'KJ', 4: 'FG', 5: 'WE', 6: 'NB', 7: 'GH', 8: 'AA', 9: 'ZX', 10: 'QQ', 11: 'OI', 12: 'XX'}}
df_1 = pd.DataFrame(dic_1)
df_1


   intA intB
0   A   FG
1   B   GH
2   A   SD
3   D   KJ
4   A   FG
5   F   WE
6   C   NB
7   H   GH
8   D   AA
9   X   ZX
10  A   QQ
11  C   OI
12  X   XX

dic_2 = {'ref': {0: 'AA',
  1: 'GH',
  2: 'CD',
  3: 'FG',
  4: 'XX',
  5: 'TY',
  6: 'ZX',
  7: 'SD',
  8: 'KJ',
  9: 'IU'}}
df_2 = pd.DataFrame(dic_2)
df_2
    ref
0   AA
1   GH
2   CD
3   FG
4   XX
5   TY
6   ZX
7   SD
8   KJ
9   IU

我想要的是一个看起来像这样的结果数据框:

  symbol    count
0   A   3
1   B   1
2   D   2
3   F   0
4   C   0
5   H   1
6   X   2

逻辑:对于df_1中'intA'列中的每一项,如果df_1中'intB'列中对应的项存在于df_2中'ref'列中,则计数加1。例如,在 'intA' 中出现了 4 次 'A',但在 df_2 的 'ref' 中只有 'intB' 列中的三个对应项,因此计数为 3。

回答

创建一个布尔掩码isin以测试intB列中的元素是否与列中的任何元素匹配ref,然后此掩码中sumTrue值每个唯一值intA

df_1.set_index('intA')['intB'].isin(df_2['ref'])
    .sum(level=0).rename_axis('symbol').reset_index(name='count')

  symbol  count
0      A      3
1      B      1
2      D      2
3      F      0
4      C      0
5      H      1
6      X      2


以上是如何比较两个不同数据框中的两列并计算出现次数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>