【问题标题】:Distinct column values within categories类别中的不同列值
【发布时间】:2021-09-23 07:48:58
【问题描述】:

我有以下数据框:

Category Product
63 Z
63 Z
63 B
63 C
83 B
83 P
84 B
84 C
84 F
85 B
85 C
85 T
85 X
85 X
85 B

我想获得 (4) 个类别中唯一(不同)的产品。它们可以是具有相同产品的同一类别中的多行,但是一旦产品出现在不同的类别中,我不希望他显示在新的数据框上。我想删除重复的行,除非它们属于同一类别而不属于其他类别。

输出:

Category Product
63 Z
63 Z
83 P
84 F
85 T
85 X
85 X

我试图计算这样的唯一值,但没有成功:

new_df=df.drop_duplicates(['Category','Product'])[['Category','Product']]

我还想显示该类别中最常见的产品,但不幸的是,这些图表在类别中存在重复(例如 63 个类别)

new_df = df[df['Category'] == 63].copy()
new_df['Product'].value_counts()[:10].plot(kind='barh')

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 我已经添加了我的代码@ExtraFishness

标签: python unique distinct


【解决方案1】:

我会计算每个产品的(不同)类别的数量,并删除那些超过 1 的类别。然后将初始数据框与这个新数据框连接起来就可以完成这项工作

df_calc = df.groupBy(df.Product).agg(countDistinct(df.Category)).alias('nb_cat').filter(df.nb_cat == 1)
new_df = df.join(df_calc, on='Product')

联接将是交叉联接,但df_calc 每个产品应该只有一行。

【讨论】:

  • 感谢您的回复!我碰到了 SyntaxError:'表达式不能包含赋值,也许你的意思是“==”?添加'=='后我得到'AttributeError:'DataFrame'对象没有属性'groupBy''
  • 是的,我的错误,抱歉正确的语法是==,我编辑了我的帖子。换了还有问题吗?
  • 从“groupBy”更改为 groupby 后出现“NameError: name 'countDistinct' is not defined”。在更改之前是“AttributeError: 'DataFrame' object has no attribute 'groupBy'”
  • 您可能需要导入相关模块(from pyspark.sql import functions as F)然后使用F.countDistinct()
  • 好的,我想我知道出了什么问题:我以为您使用的是 pyspark,但您使用的是 pandas,不是吗?在这种情况下,countDistinct 不存在,您可以使用nunique() method。我不会编辑我的帖子,因为我不熟悉 pandas 语法
猜你喜欢
  • 2019-10-24
  • 2021-04-25
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 2018-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多