python - 如何计算数据框中与一列不同的行数?
问题描述
我知道这不是一个人应该在这里做的事情,尽管我不知道我该怎么问这个问题。
data_train = pd.DataFrame({"buying": [0,1,0,1,0,0,0], "maint":[0,1,0,1,0,0,0], "doors": [0,1,0,1,0,0,0],
"persons": [0,1,0,1,0,0,0], "lug_boot":[0,1,0,1,0,0,0], "safety": [0,1,0,1,0,0,0],
"rating" : [1,1,2,1,3,4,5] })
data_train = data_train.groupby(["buying", "maint", "doors", "persons", "lug_boot", "safety"]) \
.agg({"buying": "count", "maint": "nunique"})#.query("buying>1")["maint"].sum()
我的目标是计算有多少行具有相同的第一个预测变量(购买、维护等),但评级不同。
我的尝试是整理第一列,然后计算我得到的不同评级的数量,这会很棒。
一个重要的假设是,如果两行相同,则它们已被预先删除。因此,可以找到评级不同的行,但没有相同的行。
在我的示例中,第 1 行和第 3 行是相同的,因此删除了一个并且没有问题。但是,对于其他人,它们的评级不同,所以有一个问题,我应该得到 5 作为回报,因为有 5 个相同的预测变量行,它们的评级不同。
可以理解吗?
解决方案
它可以通过以下方式完成:
df = pd.DataFrame({"x1": ["A", "A", "A", "A", "A", "B", "B"], "x2":[1, 1, 2, 3, 4, 2, 3], "x3": [0,1,0,1,0,0,0]})
df.groupby(["x1", "x2"]).agg({'x1':"count", "x3":"nunique"}).query("x1 >1")["x3"].sum()
给
2
我们正在收集每组的行数(聚合 wrt 就足够了x1
)以及最后一列的不同值的数量。我们希望每组至少有两行,对吗?然后我们只是对子查询后的结果求和,即过滤至少有两个条目的组。
推荐阅读
- angular - 使用 ngFor 过滤列表项或使用 ngFor 的类似情况
- python - 如何使用 python 删除 SharePoint excel 工作表中存在的所有行?
- php - 如何在php中将多个查询结果合并为单个结果
- math - 解释X02AJF(0.D0)的含义
- typo3 - 为什么我的 TYPO3 文档的生成失败而没有正确的错误?
- audio - 将各种音频和视频源混合成一个视频
- ios - Flutter,IOS,如何防止录音
- python - 通过python在另一个终端输入命令
- php - 最大限制 - 列出来自 Google Shopping Content API 的产品
- javafx - JAVAFX fxml 的问题 - 文本区域自动收缩