我想计算每一行数据的频率。例如,
column_nameA | column_nameB | column_nameC | titlecontent | |
---|---|---|---|---|
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