当前位置: 首页 > 知识库问答 >
问题:

如何计算数据帧中不同于一列的行数?

戈安翔
2023-03-14

我知道这不是一个人应该在这里做的事情,尽管我不知道否则我怎么能问这个问题。

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个相同的预测行,它们的评级不同。

这可以理解吗?

共有2个答案

丰飞龙
2023-03-14

由于情况发生了太多变化,并且有了新的信息:

一个解决方案就是:

nuniques = data_train.groupby(data_train.columns[:-1].tolist())['rating'].nunique()

在这里,您可以看到每行(或行组)的唯一评级。现在,如果nunique==1并且由于没有重复项,我们可以使用nunique对组进行筛选

nuniques[nuniques>1].sum()
5

高英彦
2023-03-14

可以通过以下方式实现:

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

我们正在收集每组的行数(这足以聚合w.r.tx1)和最后一列的不同值的数量。我们希望每组至少有两行,对吗?然后,我们只需在子查询之后对结果求和,即过滤至少有两个条目的组。

 类似资料: