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

Pandas DataFrame复杂转换求助:按抗菌药聚合行列式与频率

解决方案

要实现频率与Determinant的对应格式,需要分两步层级聚合处理,以下是完整实现代码:

import pandas as pd

# 原始数据
df = pd.DataFrame({
    'Antimicrobial': ['anti1', 'anti1', 'anti1', 'anti2'],
    'Determinant': ['det1', 'det1', 'det2', 'det3'],
    'Frequency': [0.8, 0.5, 0.5, 0.9]
})

# 1. 先按「抗菌剂+Determinant」分组,处理单类Determinant的频率格式
def format_frequency(series):
    freq_list = series.tolist()
    if len(freq_list) > 1:
        return f"[{', '.join(map(str, freq_list))}]"
    return str(freq_list[0])

det_level_group = df.groupby(['Antimicrobial', 'Determinant'], as_index=False).agg(
    Frequency=('Frequency', format_frequency)
)

# 2. 再按抗菌剂分组,完成最终的字段拼接
final_agg = {
    'Determinant': lambda x: '; '.join(sorted(x)),
    'Frequency': lambda x: '; '.join(x)
}

result_df = det_level_group.groupby('Antimicrobial', as_index=False).agg(final_agg)

print("转换后结果:")
print(result_df)

代码逻辑说明

  • 第一层级聚合:先把同一抗菌剂下的同一种Determinant对应的频率整合,多值用方括号包裹、逗号分隔,单值直接转字符串,保证每个Determinant对应唯一的频率字符串
  • 第二层级聚合:按抗菌剂分组后,对Determinant排序并分号连接,同时按相同顺序把对应的频率字符串分号连接,确保两者一一对应

最终输出

转换后结果:
  Antimicrobial Determinant         Frequency
0         anti1  det1; det2  [0.8, 0.5]; 0.5
1         anti2        det3              0.9

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:33:25