python - 操作数据集
问题描述
我有一个包含 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
解决方案
很多方法可以做到这一点:
使用 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 有一个非常聪明的方法。
推荐阅读
- python - PyTorch 中自动编码器的输出显示图像上的网格
- triggers - Pine 脚本 - Tradingview - 需要延迟触发序列以使其不在同一个柱上发生才能执行
- javascript - 将数据从一个选项卡发送到另一个跨域
- flutter - Why are Dart null-safety problems showing up inconsistently in 2 places
- java - 正则表达式检查重复字符
- tpm - TPM,开放连接。请求的 PKCS #11 对象不可用
- java - 将对象中的值更改为蛇形
- r - 将分类列转换为数值
- reactjs - 在 useEffect 之外定义函数和在其中调用该函数以及在 useEffect 中定义函数有什么区别?
- flutter - 如何从作为地图传入的多个 TextController 中检索文本