考虑以下两个数据帧:
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”中有四次出现“A”,但在df_2中的“ref”中只有“intB”列中的三个对应项,因此计数为3
使用^{} 作为} 计算值,按^{} 添加缺少的值,最后将
df_1
中的筛选器,然后按^{Series
转换为2列Dataframe
:创建一个带有
isin
的布尔掩码,以测试intB
列中的元素是否与ref
列中的任何元素匹配,然后sum
根据intA
中的唯一值确定此掩码中的True
值通过
groupby
的另一个选项:输出:
相关问题 更多 >
编程相关推荐