You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Python中CSV文件门间连接数累加:生成连接统计表

解决方案:累加门间连接数并生成统计表

这问题我处理类似数据时也碰到过,核心就是要先按(out_gate, in_gate)的组合对连接数做累加,再把累加结果映射到你需要的矩阵格式里。下面给你两种实用的实现方式:

方法一:基础Python实现(无需额外库)

这种方法适合不想引入第三方库的场景,用字典存储累加后的连接数,再生成目标表格:

步骤1:模拟/读取CSV数据并累加连接数

先把CSV数据读进来(这里用列表模拟,实际可以用csv模块读取文件),然后用字典记录每个(out, in)组合的总连接数:

# 模拟CSV数据行(实际可通过csv.reader读取本地文件)
csv_rows = [
    ['a','b',1],
    ['a','b',3],
    ['b','a',2],
    ['b','c',4],
    ['c','a',5],
    ['c','b',5],
    ['c','b',3],
    ['c','a',4]
]

# 初始化字典存储累加后的连接数
connection_totals = {}
for out_gate, in_gate, num in csv_rows:
    # 把CSV读取的字符串类型连接数转为整数
    num = int(num)
    # 用(out_gate, in_gate)作为字典的唯一键
    key = (out_gate, in_gate)
    if key in connection_totals:
        connection_totals[key] += num
    else:
        connection_totals[key] = num

步骤2:生成目标统计表

用你已有的listfile作为行和列的顺序,遍历每个组合填充数值(对角线设为0):

listfile = ['a','b','c']

# 打印表头(空字符串对应行首的out_gate标识列)
print('\t'.join([''] + listfile))
# 遍历每个out_gate生成对应行数据
for out in listfile:
    row_values = []
    for in_gate in listfile:
        if out == in_gate:
            # 对角线位置(自身到自身)设为0
            row_values.append('0')
        else:
            # 从字典取累加值,无匹配则默认0
            row_values.append(str(connection_totals.get((out, in_gate), 0)))
    # 打印当前行(out_gate + 对应数值)
    print('\t'.join([out] + row_values))

运行后就能得到你要的结果:

a   b   c
a   0   4   0
b   2   0   4
c   9   8   0

方法二:用Pandas实现(更简洁高效)

如果数据量较大,用Pandas会更高效,代码也更简洁:

import pandas as pd

# 构造DataFrame(实际可直接用pd.read_csv读取CSV文件)
df = pd.DataFrame(
    csv_rows,
    columns=['out_gate', 'in_gate', 'num_connection']
)
# 确保连接数为整数类型
df['num_connection'] = df['num_connection'].astype(int)

# 按out_gate和in_gate分组求和,转成宽表格式
summary_df = df.groupby(['out_gate', 'in_gate'])['num_connection'].sum().unstack(fill_value=0)

# 按listfile的顺序调整行和列的排序
summary_df = summary_df.reindex(index=listfile, columns=listfile)

# 将对角线位置(自身到自身)设为0
for gate in listfile:
    summary_df.loc[gate, gate] = 0

# 打印最终统计表
print(summary_df)

运行后输出结果和方法一完全一致,且处理大规模数据时性能更优。

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

火山引擎 最新活动