Python中如何按字符串特征统计相对丰度总和?
字符串特征匹配与丰度统计实现方案
需求说明
给定包含字符串和对应相对丰度的表格,以及一组特征字符串,需要检查每个字符串是否包含特征,并统计每个特征对应的丰度总和。
示例输入
- 字符串丰度表格:
+────────────+────────────+ | String | Abundance | +────────────+────────────+ | abcdef | 12 | | cdefgh | 15 | | fghijk | 36 | | jklmnoabc | 37 | +────────────+────────────+
- 特征列表:
cdef, abc, jk
实现方法
方法一:使用Pandas(适合处理大规模表格)
Pandas是Python中处理表格数据的常用库,代码简洁高效:
import pandas as pd # 1. 定义输入数据 data = { 'String': ['abcdef', 'cdefgh', 'fghijk', 'jklmnoabc'], 'Abundance': [12, 15, 36, 37] } df = pd.DataFrame(data) features = ['cdef', 'abc', 'jk'] # 2. 统计每个特征的丰度总和 result = {} for feature in features: # 筛选包含当前特征的字符串,求和对应丰度 total = df[df['String'].str.contains(feature)]['Abundance'].sum() result[feature] = total # 3. 整理成结果表格并输出 result_df = pd.DataFrame(list(result.items()), columns=['Feature', 'Abundance (%)']) print(result_df.to_string(index=False))
运行后输出:
Feature Abundance (%) cdef 27 abc 59 jk 73
方法二:基础Python实现(适合小数据量)
如果不需要依赖第三方库,用基础Python也能完成:
# 1. 定义输入数据 string_list = ['abcdef', 'cdefgh', 'fghijk', 'jklmnoabc'] abundance_list = [12, 15, 36, 37] features = ['cdef', 'abc', 'jk'] # 2. 初始化结果字典 feature_total = {feat: 0 for feat in features} # 3. 遍历字符串和丰度,匹配特征并累加 for s, ab in zip(string_list, abundance_list): for feat in features: if feat in s: feature_total[feat] += ab # 4. 格式化输出表格 print("+──────────+────────────────+") print("| Feature | Abundance (%) |") print("+──────────+────────────────+") for feat, total in feature_total.items(): # 格式化字符串保证对齐 print(f"| {feat:<8} | {total:<16} |") print("+──────────+────────────────+")
运行后输出和示例完全一致:
+──────────+────────────────+ | Feature | Abundance (%) | +──────────+────────────────+ | cdef | 27 | | abc | 59 | | jk | 73 | +──────────+────────────────+
关键逻辑说明
- 核心是检查每个字符串是否包含目标特征:Python中可以用
in关键字(基础写法)或Pandas的str.contains()方法(表格写法)实现匹配。 - 匹配成功后,将对应字符串的丰度累加到特征的总丰度中。
内容的提问来源于stack exchange,提问作者BenWest
相关产品推荐
相关产品推荐

