value_counts返回相同值的计数?

时间:2020-09-15 18:06:00

标签: python pandas

这是以下课程

class MyClass: 

    def __init__(self, cat): 
        if cat not in ['STR', 'MTR', 'CA', 'Other', 'None']:
            raise ValueError
        self.cat = cat
        
    def __add__(self, other): 
        if self.cat == 'STR' or other.cat == 'STR':
            return MyClass('STR')
        if self.cat == 'MTR' or self.cat == 'CA' or other.cat == 'MTR' or other.cat == 'CA':
            return MyClass('MTR')
        return MyClass('None')
    
    def __eq__(self, other): 
        if isinstance(other, str):
            return self.cat == other
        elif isinstance(other, MyClass): 
            return self.cat == other.cat
        else:
            raise ValueError
            
    def __ne__(self, other): 
        if isinstance(other, str):
            return self.cat != other
        elif isinstance(other, MyClass): 
            return self.cat != other.cat
        else:
            raise ValueError    
            
    def __str__(self): 
        return self.cat

我试图添加按日期索引的MyClass实例数组:

start_date =  pd.Timestamp(datetime.date(2017, 1, 1))
end_date =  pd.Timestamp(datetime.date(2017, 1, 31))
ref = pd.Series(MyClass('None'), index=pd.date_range(start_date, end_date))
ref.value_counts()
None    31
dtype: int64
start_date =  pd.Timestamp(datetime.date(2017, 1, 10))
end_date =  pd.Timestamp(datetime.date(2017, 1, 20))
test = pd.Series(MyClass('STR'), index=pd.date_range(start_date, end_date))
test.value_counts()
STR    11
dtype: int64
ref = ref.add(test, fill_value=MyClass('None'))
ref.value_counts()

我不了解上述value_counts的结果

None    19
STR     11
None     1
dtype: int64

为什么没有两次出现?

谢谢

1 个答案:

答案 0 :(得分:1)

我认为大熊猫检查唯一性需要对象的哈希值。

您可以在下面添加到您的课程中吗?

def __hash__(self):
    return self.cat.__hash__()

添加后,您将获得以下值-

None    20
STR     11
dtype: int64