如何通过Pandas分组筛选多数文献显示疾病下调作用的药物
实现逻辑与代码
核心逻辑是按Drug字段分组后统计每个药物的下调结论占比,再筛选符合要求的药物。
方法1:严格多数(下调论文数超过总论文数的1/2)
符合你示例中对“多数”的判定逻辑:
# 1. 按药物分组统计总论文数、下调结论的论文数 drug_stats = df.groupby("Drug", as_index=False).agg( total_cnt = ("Journal", "count"), down_cnt = ("Affect", lambda ser: (ser == "downregulate").sum()) ) # 2. 筛选符合条件的药物,输出为列表 qualified_drugs = drug_stats[drug_stats["down_cnt"] > drug_stats["total_cnt"] / 2]["Drug"].tolist()
方法2:相对多数(下调是所有结论中占比最高的类型)
如果你的“多数”指下调结论的数量比其他任意单类结论都多(不需要超过总数量的一半),可以用如下逻辑:
qualified_drugs = ( df.groupby("Drug")["Affect"] # 取每个药物出现次数最多的作用效果 .agg(lambda ser: ser.value_counts().idxmax()) # 筛选出最常见效果为下调的药物 .loc[lambda x: x == "downregulate"] .index .tolist() )
补充说明:数据拼写校正
你提供的示例数据中存在aspirin拼写为aspririn、ibuprofen拼写为iboruprofen的错误,如果需要把拼写错误的同一种药物合并统计,可以提前做数据清洗:
# 可根据实际错误情况扩展校正映射表 spell_map = { "aspririn": "aspirin", "iboruprofen": "ibuprofen" } df["Drug"] = df["Drug"].replace(spell_map)
内容的提问来源于stack exchange,提问作者Electra
相关产品推荐
相关产品推荐

