这是以下课程
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
为什么没有两次出现?
谢谢
答案 0 :(得分:1)
我认为大熊猫检查唯一性需要对象的哈希值。
您可以在下面添加到您的课程中吗?
def __hash__(self):
return self.cat.__hash__()
添加后,您将获得以下值-
None 20
STR 11
dtype: int64