【问题标题】:How can I count the number of rows in a dataframe that differ from one column?如何计算数据框中与一列不同的行数?
【发布时间】:2020-04-08 07:44:00
【问题描述】:

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

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

可以理解吗?

【问题讨论】:

  • 0,23 具有相同的第一列,但不同的最后一列。所以 3 行和结果 3?
  • 你是对的^^',好的答案已经更正了。
  • 您能提供更多上下文吗?我的意思是,假设在最后一列中,值 2 在“A”组下出现两次。你想怎么算。一点也不,有1?我不确定这个问题是否真的很好,而且你的示例集似乎很小。 “B”组呢?它也可以贡献 1 ...
  • @Quickbeam2k1 我添加了几行。我的要求现在应该更明白了:) 我认为这个例子很好。您能否编辑您的答案以将 x2 作为行间相似性的一个因素?
  • 不,它不应该给 4。或者如果是这样,我不明白逻辑

标签: python pandas dataframe pandas-groupby


【解决方案1】:

可以这样做:

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

【讨论】:

  • 如果有多个列“x1”,那么我将“x1”替换为[“x1”,“x2”] 对吗?
  • 仅当"x2" 不是您的最后一列,但是是的时
  • 抱歉,答案是什么?你在等我那边的消息吗?
  • 我根据新栏目更新了答案。不过,这个问题不是很具体
  • 你是什么意思,我认为你还必须输入“x2 > 1”。在问题中,我写了“第一列S”。你能告诉我什么不具体吗?我真的不知道什么不清楚:'(我认为这是我迄今为止提出的最好的问题之一。
【解决方案2】:

由于事情发生了太多变化并且有新的信息可用:

一个解决方案就是:

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

您可以在此处看到每行(或多组)的唯一评分。现在如果nunique == 1 并且因为我们没有重复,我们可以只过滤带有nunique>1 的组。 因此

nuniques[nuniques>1].sum()
5

【讨论】:

    猜你喜欢
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 2019-08-14
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多