我有两个数据帧:
data = {
'values': ['Cricket', 'Soccer', 'Football', 'Tennis', 'Badminton', 'Chess'],
'gems': ['A1K, A2M, JA3, AN4', 'B1, A1, Bn2, B3', 'CD1, A1', 'KWS, KQM', 'JP, CVK', 'KF, GF']
}
df1 = pd.DataFrame(data)
df1
values gems
0 Cricket A1K, A2M, JA3, AN4
1 Soccer B1, A1, Bn2, B3
2 Football CD1, A1
3 Tennis KWS, KQM
4 Badminton JP, CVK
5 Chess KF, GF
第二数据帧
data2 = {
'1C': ['B1', 'K1', 'A1K', 'J1', 'A4'],
'02C': ['Bn2', 'B3', 'JK', 'ZZ', 'ko'],
'34C': ['KF', 'CD1', 'B3','ji', 'HU']
}
df2 = pd.DataFrame(data2)
df2
1C 02C 34C
0 B1 Bn2 KF
1 K1 B3 CD1
2 A1K JK B3
3 J1 ZZ ji
4 A4 ko HU
我希望检查df1['gems']
中df2
每列中的df1['gems']
项,并表示它们的计数和重叠项。预期产出为:
values gems 1C 1CGroup 02C 02CGroup 34C 34CGroup
0 Cricket A1K, A2M, JA3, AN4 1 A1K 0 NA 0 NA
1 Soccer B1, A1, Bn2, B3 1 Bn2 2 Bn2, B3 1 B3
2 Football CD1, A1 0 NA 0 NA 1 CD1
3 Tennis KWS, KQM 0 NA 0 NA 0 NA
4 Badminton JP, CVK 0 NA 0 NA 0 NA
5 Chess KF, GF 0 NA 0 NA 1 KF
首先创建一个组表:
输出:
然后生成计数并将所有内容与原始表连接:
输出:
编辑:字符串联接和计数的备选方案
含有
findall
对于
df2
中的每个列,在df1
的gems列中查找列值的所有出现次数,然后map
使用len
来计算出现次数,还可以选择join
使用str.join
首先
str.split
和explode
列gems和reset_index
保留原始索引。然后,对于df2的每一列,merge
和分解的gem,groupby
原始索引,并根据需要执行count
和聚合 与join
一起pd.concat
合并每个列并连接到原始df1fillna
如预期输出中所示,计数列为0相关问题 更多 >
编程相关推荐