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

如何合并矩阵中前缀相同的列向量?

嘿,这个需求挺常见的,用Python的话不管是用Pandas库还是纯原生代码都能轻松解决!我给你两种方案,你可以按需选择:

方案一:用Pandas(推荐,适合大型矩阵)

Pandas处理这类表格数据简直是得心应手,步骤很清晰:

  1. 把你的数据转换成DataFrame格式
  2. 提取每个列名的前缀(按你的需求,就是开头完全相同的部分)
  3. 按前缀分组,每组取最大值(因为原数据是0/1,只要组内有1结果就是1,完美实现合并)

直接上代码:

import pandas as pd

# 构造你的示例数据(实际使用时可以直接读取你的矩阵数据)
data = {
    'Ketchup': [0, 1, 0, 1],
    'Ketchupwithgarlic': [1, 0, 0, 0],
    'Ketchupspicy': [0, 0, 0, 0],
    'Chips': [0, 0, 1, 0],
    'Chipsorganic': [1, 0, 0, 0]
}
df = pd.DataFrame(data)

# 提取列名的前缀(这里用正则匹配开头的大写字母+后续小写字母,适配你的列名格式)
prefixes = df.columns.str.extract(r'^([A-Z][a-z]+)')[0]

# 按前缀分组合并,取每组最大值(等价于逻辑或操作)
merged_df = df.groupby(prefixes, axis=1).max()

# 输出结果
print(merged_df)

运行后输出就是你想要的:

Ketchup  Chips
0        1      1
1        1      0
2        0      1
3        1      0

如果你的列名前缀规则不同(比如是用下划线分隔的,像Ketchup_with_garlic),只要调整提取前缀的代码就行,比如改成prefixes = df.columns.str.split('_').str[0]。

方案二:纯Python实现(无需额外库)

如果不想用第三方库,用原生Python也能搞定,适合轻量数据或者不能安装库的场景:

# 你的原始矩阵数据和列名
raw_data = [
    [0, 1, 0, 0, 1],
    [1, 0, 0, 0, 0],
    [0, 0, 0, 1, 0],
    [1, 0, 0, 0, 0]
]
columns = ['Ketchup', 'Ketchupwithgarlic', 'Ketchupspicy', 'Chips', 'Chipsorganic']

# 第一步:建立前缀到列索引的映射
prefix_to_indices = {}
for col_idx, col_name in enumerate(columns):
    # 提取前缀:这里取到第一个新的大写字母出现前的部分(适配你的列名格式)
    prefix = []
    for char in col_name:
        if char.isupper() and prefix:
            break
        prefix.append(char)
    prefix = ''.join(prefix)
    
    if prefix not in prefix_to_indices:
        prefix_to_indices[prefix] = []
    prefix_to_indices[prefix].append(col_idx)

# 第二步:合并每行的数据
merged_data = []
for row in raw_data:
    new_row = []
    for prefix in prefix_to_indices:
        # 检查该前缀下的所有列是否有1,有则为1,否则为0
        has_one = any(row[idx] == 1 for idx in prefix_to_indices[prefix])
        new_row.append(1 if has_one else 0)
    merged_data.append(new_row)

# 第三步:打印结果
print('\t'.join(prefix_to_indices.keys()))
for row in merged_data:
    print('\t'.join(map(str, row)))

这段代码运行后同样会输出你期望的结果~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:14:48