查找 Dataframe Pandas中唯一值的计数,即值在一列中仅出现一次

km0tfn4u  于 2023-02-17  发布在  其他
关注(0)|答案(3)|浏览(181)

有人能告诉我如何才能找到在panda Dataframe 的列中只出现过一次的值的计数吗?我知道我们可以使用n个函数,如nuniqueunique().size等,但它们只提供了不同值的计数,而我试图找到在整个列中hva只出现过一次的值。下面是一个示例

import pandas as pd
technologies = {
    'Courses':["Spark","PySpark","Python","Pandas","Python","Spark","Pandas","AWS","Spark"],
    'Fee' :[20000,25000,22000,30000,25000,20000,30000,50000,20000],
    'Duration':['30days','40days','35days','50days','40days','30days','50days','90days','30days'],
    'Discount':[1000,2300,1200,2000,2300,1000,2000,1500,1000]
              }
df = pd.DataFrame(technologies)

运行df.Discount.unique().size将得到值5,即[1000, 2300, 1200, 2000, 1500]
但我的预期输出是2,即[1200, 1500]
谢谢。

6yt4nkrj

6yt4nkrj1#

value_counts()返回一个Series。只需计算有多少个值只有一个计数:

counts = df.Discount.value_counts()
counts[counts==1].sum()
rks48beu

rks48beu2#

像这样?

df = df.groupby('Discount').count()['Courses'] 
df[df==1]

Discount
1200    1
1500    1
Name: Courses, dtype: int64

编辑:参见Ignatius Reilly的回答,使用value_counts更好。

u59ebvdq

u59ebvdq3#

duplicatedkeep=False一起使用,将布尔值与~sum取反:

df.apply(lambda s: ~s.duplicated(keep=False)).sum()

输出:

Courses     2
Fee         2
Duration    2
Discount    2
dtype: int64

如果需要这些值:

(df.mask(df.apply(lambda s: s.duplicated(keep=False)))
   .stack().groupby(level=1).agg(list)
)

输出:

Courses         [PySpark, AWS]
Discount      [1200.0, 1500.0]
Duration      [35days, 90days]
Fee         [22000.0, 50000.0]
dtype: object

相关问题