You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计pandas DataFrame中两人在同一图像中的共同出现次数

两人同现次数统计实现方案

实现思路

  • 按图片ID分组,提取每张图里出现的所有人物
  • 对单张图的人物列表生成不重复的二元无序组合,保证(Bob, Mary)和(Mary, Bob)被识别为同一个组合
  • 统计所有组合的出现频次,按需转换为三列结果或对称共现矩阵

完整代码

import pandas as pd
from itertools import combinations

# 示例数据构造
data = [[1, 'Mary'], [1, 'Bob'], [1, 'Susan'],
        [2, 'Bob'], [2, 'Joe'],
        [3, 'Isaac'],
        [4, 'Mary'], [4, 'Susan'],
        [5, 'Mary'], [5, 'Susan'], [5, 'Bob'], [5, 'Joe']]
df = pd.DataFrame(data, columns=['image_id', 'name'])

# 生成三列格式结果:name1、name2、count
pair_series = df.groupby('image_id')['name'].apply(lambda x: list(combinations(sorted(x), 2)))
pair_counts = pair_series.explode().value_counts().reset_index()
pair_counts.columns = ['name_pair', 'count']
pair_counts[['name1', 'name2']] = pd.DataFrame(pair_counts['name_pair'].tolist(), index=pair_counts.index)
result_triple = pair_counts[['name1', 'name2', 'count']].sort_values('count', ascending=False).reset_index(drop=True)
print("三列格式结果:")
print(result_triple)

# 生成对称共现矩阵
pair_all = pd.concat([
    result_triple.rename(columns={'name1':'row', 'name2':'col'}),
    result_triple.rename(columns={'name2':'row', 'name1':'col'})
])
all_names = df['name'].unique()
co_matrix = pd.crosstab(index=pair_all['row'], columns=pair_all['col'], values=pair_all['count'], aggfunc='sum').reindex(index=all_names, columns=all_names, fill_value=0)
print("\n共现矩阵结果:")
print(co_matrix)

输出示例

三列格式结果

name1  name2  count
0  Mary  Susan      3
1   Bob  Susan      2
2   Bob    Joe      2
3  Mary    Bob      2
4  Mary    Joe      1
5 Susan    Joe      1

共现矩阵结果

col    Mary  Bob  Susan  Joe  Isaac
row                                
Mary      0    2      3    1      0
Bob       2    0      2    2      0
Susan     3    2      0    1      0
Joe       1    2      1    0      0
Isaac     0    0      0    0      0

内容的提问来源于stack exchange,提问作者DV82XL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:06:04