首页 > 解决方案 > 操作数据集

问题描述

我有一个包含 3 列和超过 300,000 行的数据集。前两列显示患者正在经历的症状,最后一列显示他们接种的疫苗。我想要一个数据集来计算每种疫苗的症状组合数量。我在下面附上了一个示例数据集和我想要的:

Exp=pd.DataFrame({'sym1':['pain','fever','headache','pain','paralysis'],\
                  'sym2':['fever','Cancer','paralysis','fever','pain'],'Vaccine':['a','b','c','a','d']})

它看起来像这样:

    sym1    sym2       Vaccine
0   pain    fever         a
1   fever   Cancer        b
2   headache paralysis    c
3   pain    fever         a
4   paralysis pain        d

我想要的是这样的:

Result=pd.DataFrame({'sym1':['pain','fever','headache','paralysis'],\
                  'sym2':['fever','Cancer','paralysis','pain'],'Vaccine':['a','b','c','d'],'Count':[2,1,1,1,]})

它看起来像这样:

sym1         sym2       Vaccine   Count
0   pain     fever        a        2
1   fever    Cancer       b        1
2   headache paralysis    c        1
3   paralysis   pain      d        1

标签: pythonpandasdata-manipulationdata-wrangling

解决方案


很多方法可以做到这一点:

使用 groupby,转换和计数并删除重复项:

Exp["Count"] = Exp.groupby(["sym1", "sym2", "Vaccine"])["sym1"].transform("count")
# Can add a reset_index if needed
Exp = Exp.drop_duplicates()

或经典的 group by 和 agg:

Exp = Exp.groupby(["sym1", "sym2", "Vaccine"], as_index=False).agg(Count=("sym1", "count"))

不过,Cameron 有一个非常聪明的方法。


推荐阅读