操作数据集

Manipulating DataSet

我有一个包含 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

如果您的 pandas 版本 > 1.1.0,您可以:

counts_df = (Exp.value_counts()
             .rename("counts")
             .reset_index())

print(counts_df)
        sym1       sym2 Vaccine  counts
0       pain      fever       a       2
1  paralysis       pain       d       1
2   headache  paralysis       c       1
3      fever     Cancer       b       1

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

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

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

或者一个经典的 group by and agg:

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

虽然卡梅伦有一个非常聪明的方法。