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

如何使用Python Pandas实现表关联与统计?代码输出修正需求

Pandas处理引脚与网络数据:修正表关联与统计逻辑

我用以下Pandas代码处理引脚与网络数据,但输出不符合预期,期望得到特定格式的配对统计结果。

现有代码:

import pandas as pd
data = {
    'NET': ['P3V3_AUX', 'GND', 'P3V3_AUX', 'GND', 'P3V3_AUX', 'GND', 'P48V_2_ADMHS_VCC', 'P48V_2_ADMHS_AGND'],
    'Pin ref.new': ['C1.1', 'C1.2', 'C1102.1', 'C1102.2', 'C2.1', 'C2.2', 'PC17.1', 'PC17.2']
}
df = pd.DataFrame(data)
df['Pin ref.new'] = df['Pin ref.new'].str.split('.').str[0]
result = df.groupby(['Pin ref.new', 'NET']).size().reset_index(name='count')
result.rename(columns={'Pin ref.new': 'Pin ref.new', 'NET': 'NETA'}, inplace=True)
result['NETB'] = result['NETA'].shift(-1)
result = result.iloc[:-1]
print(df)
print(result)

当前问题:原代码用shift(-1)会跨引脚组关联NET,导致错误配对(比如C2的GND和PC17的P48V_2_ADMHS_VCC被错误关联),实际需要每个引脚组内部的两个NET进行配对,同时保留引脚标识和统计数量。

期望输出格式:

Pin ref.newNETANETBcount
C1P3V3_AUXGND1
C1102P3V3_AUXGND1
C2P3V3_AUXGND1
PC17P48V_2_ADMHS_VCCP48V_2_ADMHS_AGND1

解决方案

核心是按引脚分组后,在每组内部提取两个NET作为NETA和NETB,而非全局移位。以下两种方法均可实现:

方法1:分组聚合处理

import pandas as pd
data = {
    'NET': ['P3V3_AUX', 'GND', 'P3V3_AUX', 'GND', 'P3V3_AUX', 'GND', 'P48V_2_ADMHS_VCC', 'P48V_2_ADMHS_AGND'],
    'Pin ref.new': ['C1.1', 'C1.2', 'C1102.1', 'C1102.2', 'C2.1', 'C2.2', 'PC17.1', 'PC17.2']
}
df = pd.DataFrame(data)
# 处理引脚标识,去除后缀
df['Pin ref.new'] = df['Pin ref.new'].str.split('.').str[0]

# 按引脚分组,提取每组的两个NET作为配对,count设为1
result = df.groupby('Pin ref.new').agg(
    NETA=('NET', lambda x: x.iloc[0]),
    NETB=('NET', lambda x: x.iloc[1]),
    count=('NET', lambda x: 1)
).reset_index()

print(result)

方法2:Pivot转置(适合每组固定2个NET的场景)

import pandas as pd
data = {
    'NET': ['P3V3_AUX', 'GND', 'P3V3_AUX', 'GND', 'P3V3_AUX', 'GND', 'P48V_2_ADMHS_VCC', 'P48V_2_ADMHS_AGND'],
    'Pin ref.new': ['C1.1', 'C1.2', 'C1102.1', 'C1102.2', 'C2.1', 'C2.2', 'PC17.1', 'PC17.2']
}
df = pd.DataFrame(data)
df['Pin ref.new'] = df['Pin ref.new'].str.split('.').str[0]
# 给每组内的NET添加序号(0和1)
df['net_idx'] = df.groupby('Pin ref.new').cumcount()

# 转置为宽表,重命名列并添加count
result = df.pivot(index='Pin ref.new', columns='net_idx', values='NET').reset_index()
result.columns = ['Pin ref.new', 'NETA', 'NETB']
result['count'] = 1

print(result)

代码说明

  1. 两种方法均先统一引脚标识,去除.数字后缀;
  2. 方法1通过分组聚合直接提取每组内的两个NET完成配对,count设为1(每组对应一对NET);
  3. 方法2先给组内NET添加序号,再通过转置实现列配对,逻辑更直观。

运行后即可得到符合预期的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:13:25