首页 > 解决方案 > 如何计算数据框中与一列不同的行数?

问题描述

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

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

可以理解吗?

标签: pythonpandasdataframepandas-groupby

解决方案


它可以通过以下方式完成:

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)以及最后一列的不同值的数量。我们希望每组至少有两行,对吗?然后我们只是对子查询后的结果求和,即过滤至少有两个条目的组。


推荐阅读