python-3.x - 计算数据框中字符串的出现次数
问题描述
我有一个包含几列的数据框,包括一个相关性(rel)列和一个 cpc(cpc)列。rel 越高,cpc 中的值越相关。我已经编写了代码来计算 cpc 列中每个值的出现次数,但我想做的是将每个 cpc 字符串乘以 ,rel
以便我对更相关的 cpc 的权重高于不太相关的 cpc。例如,在第一行中,rel
是 74,因此每个字符串H01L51/5036
、H01L51/006
和H01L51/5016
将被计算 74 次而不是一次。
我用来计数的代码是:
from collections import Counter
flat_cpcSet = [item for sublist in cpcSet for item in sublist]
result = Counter(flat_cpcSet)
cpcSet 是一个列表列表。我已经将 cpc 列表添加到数据框而不是单独的列表中。
数据框如下所示:
>df
appID rel au x-num cpc
0 12552285 74 1719 66561 ['H01L51/5036', 'H01L51/006', 'H01L51/5016']
1 11266356 57 2621 89783 ['C22B7/006', 'B01B1/005', 'C22B3/02', 'C22B3/065', 'C22B7/007', 'C22B11/042', 'C22B11/048', 'C22B59/00', 'Y02P10/214', 'Y02P10/234']
2 14273884 55 2864 69308 ['A46B9/021']
3 12524394 50 2459 60344 ['F02B37/013', 'F01D17/105', 'F01D25/24', 'F01N13/10', 'F02B37/02', 'F02B37/183', 'F02C6/12', 'F02B37/004', 'F02M26/16', 'F05D2270/58', 'Y02T50/671', 'Y02T10/144', 'F05D2230/21']
4 12023698 39 1757 68832 ['F01K23/101', 'Y02E20/16']
5 12421790 36 1635 68488 ['G09G3/3685', 'G09G3/3611', 'G09G3/20', 'G09G2330/021', 'G09G2330/06', 'G09G2370/08']
6 13177981 24 1631 83216 ['C07D209/88', 'A61K31/403', 'C07D209/82', 'A61K31/404', 'A61K31/4045', 'A61K31/437', 'A61K31/4439', 'A61K31/506', 'C07D209/08', 'C07D209/86', 'C07D401/06', 'C07D401/12', 'C07D403/06', 'C07D403/12', 'C07D405/12', 'C07D413/06', 'C07D471/04', 'C07D495/04', 'C07F5/022', 'A61K31/4155', 'A61K31/4188', 'A61K31/4192', 'A61K31/422']
7 13065610 23 2428 71350 ['G06Q50/24', 'G06F19/00']
8 13756098 17 2484 61743 ['F28D20/025', 'F28D20/02', 'F28D20/026', 'F28F2245/06', 'F28F2265/12', 'Y02E60/145', 'F28F2265/14']
9 12823912 6 2865 61269 []
我想要的是一个看起来像的新数据框(注意,只是一个示例格式,对上述数据不正确):
CPC Symbol Count
H01L51/5036 84
H01L51/006 64
C08F290/062 55
C08F2220/1883 45
C08F220/36 44
C08F220/18 32
H01L2224/48091 26
H01L2924/0002 21
我一直在尝试写一些类似的东西:
x = 0
while x <= len(df['cpc']):
y = 0
while y <= len(df['cpc'][x]):
# code to multiply the string df['cpc'][x] by the int df['rel'][0]
y += 1
x += 1
# code to count the occurrence of the strings and write a new dataframe
解决方案
你几乎拥有你需要的一切。只需调整您的cpc
列并在其上使用计数器:
df['w_cpc'] =df.cpc*df.rel
flat_data = list(x for l in df.w_cpc for x in l)
d = Counter(flat_data)
df = pd.DataFrame.from_dict(d, orient='index').reset_index()
推荐阅读
- javascript - 是否 async/await 允许其他任务运行
- node.js - 创建 Ionic 项目的问题
- render - 如何使用 cairo 在 Linux wxWidgets 上绘制自定义控件,就像在 Windows wxWidgets 上使用 GDI+ 一样?
- arrays - 根据嵌套属性值返回对象的位置
- java - 使用 Java 更新和删除特定行 CSV 文件
- python - 在我的 Pycharm 和 CLI 中指向不同的 Python
- javascript - 从 js 购物车中提取数据并发送 php 电子邮件
- mongodb - 如果条件总是返回真正的弹簧数据 mongodb
- javascript - 在多个部分提交之前的jquery验证表单?
- java - 如何在java中打印数学时间表(某个数字的整个时间表)