在每行数据处找到一定的值并计算频率熊猫



我想计算每一行数据的频率。例如,

title
column_nameA column_nameB column_nameCcontent
AAA公司 AAA Ben Simons AAA公司有新产品发布。 AAA公司推出了新产品。AAA声称X产品比以前有了很大的变化。AAA公司CEO Ben Simons也提到.......
BBB公司 BBB Alex Wong AAA公司有新产品发布。 AAA公司推出了新产品。BBB声称X产品比以前有了很大的变化,BBB公司投资了大约100万.......

对列名称列表的所有组合使用itertools.product,并使用count创建新列,最后必要时删除原始列名称:

cols = df.columns
L1 = ['column_nameA', 'column_nameB', 'column_nameC']
L2 = ['title', 'content']
from  itertools import product
for a, b in product(L2, L1):
df[f'{b}_{a}'] = df.apply(lambda x: x[a].count(x[b]), axis=1)
df  = df.drop(cols, axis=1)
print (df)
column_nameA_title  column_nameB_title  column_nameC_title  
0                   1                   1                   0   
1                   0                   0                   0   
column_nameA_content  column_nameB_content  column_nameC_content  
0                     2                     3                     1  
1                     1                     2                     0 

最后必要时从column_nameB中减去column_nameA使用:

cola = df.columns.str.startswith('column_nameA')
colb = df.columns.str.startswith('column_nameB')
df.loc[:, colb] = df.loc[:, colb] - df.loc[:, cola].to_numpy()
print (df)
column_nameA_title  column_nameB_title  column_nameC_title  
0                   1                   0                   0   
1                   0                   0                   0   
column_nameA_content  column_nameB_content  column_nameC_content  
0                     2                     1                     1  
1                     1                     1                     0  

最新更新