【发布时间】:2018-09-08 21:05:11
【问题描述】:
我正在尝试将对象用作多索引中的列标题
数据框,但我似乎无法让它工作。 __eq__, __hash__
而__str__ 仅适用于简单的数据帧。
这是一个小例子:
class Signal:
def __init__(self, name):
self.name = name
def __eq__(self, other):
try:
return self.name == other or self.name == other.name
except AttributeError as err:
return False
def __str__(self):
return str(self.name)
def __hash__(self):
return hash(self.name)
if __name__ == '__main__':
import pandas as pd
import numpy as np
a = Signal('name')
b = Signal('name2')
c = Signal('something')
data = {
('A', a): np.arange(2),
('A', b): np.ones(2),
('B', c): np.zeros(2)
}
df = pd.DataFrame(data)
print(df)
print('-----------')
print(df['A'])
我还尝试实现__le__, __ge__ 和__ne__。那没有
做任何事。我真的不知道我还能做什么。
有人有什么想法吗?
【问题讨论】:
-
您的列名是元组,所以
df['name']将不起作用,但如果您这样做df[('A', 'name')],这将返回一些数据.. 但不确定您要在这里做什么? -
不是。如果您运行该示例,您将看到 pandas 不会创建 MultiIndex。
df['name']只是一种类型,但我应该能够只使用 0 级列名称,例如df['A']。我正在尝试创建一个 MultiIndex,但使用对象作为列标题。
标签: python pandas multi-index