【问题标题】:Pandas 'DataFrame' object has no attribute 'unique'Pandas 'DataFrame' 对象没有属性 'unique'
【发布时间】:2015-03-24 23:05:26
【问题描述】:

我在 pandas 中工作,做数据透视表,在做 groupby 时(计算不同的观察结果) aggfunc={"person":{lambda x: len(x.unique())}} 给我以下错误: 'DataFrame' object has no attribute 'unique' 任何想法如何解决它?

【问题讨论】:

  • 你可以试试:aggfunc={"person":pd.Series.nunique}

标签: python pandas pivot-table


【解决方案1】:

DataFrames 没有那个方法; DataFrames 中的列:

df['A'].unique()

或者,获取带有观察次数的名称(使用闭环给出的DataFrame):

>>> df.groupby('person').person.count()
Out[80]: 
person
0         2
1         3
Name: person, dtype: int64

【讨论】:

  • df.describe,info 怎么样?填充?
【解决方案2】:

不要在数据透视表过程中删除重复项,而是使用df.drop_duplicates() 函数选择性地删除重复项。

例如,如果您使用这些 index='c0'columns='c1' 进行旋转,那么这个简单的步骤会产生正确的计数。

在此示例中,第 5 行是第 4 行的副本(忽略非旋转的 c2

import pandas as pd
data = {'c0':[0,1,0,1,1], 'c1':[0,0,1,1,1], 'person':[0,0,1,1,1], 'c_other':[1,2,3,4,5]}
df = pd.DataFrame(data)
df2 = df.drop_duplicates(subset=['c0','c1','person'])
pd.pivot_table(df2, index='c0',columns='c1',values='person', aggfunc='count')

这正确输出

c1  0  1
c0      
0   1  1
1   1  1

【讨论】:

    【解决方案3】:

    从 DF 中获取 >1 列的唯一组合的一个非常简单的解决方案如下:

    unique_A_B_combos = df[['A', 'B']].value_counts().index.values
    

    【讨论】:

    • 请注意:这将返回一个 numpy 数组而不是数据帧。
    【解决方案4】:
    df[['col1', 'col2']].nunique()
    

    试试这个而不是单独的函数

    【讨论】:

      最近更新 更多