我创建了一个4级b树,每个叶子是Pandas系列,每个级别是一个基于True或False的2个值的系列。每个级别的系列都根据级别进行命名。结果是一个不太有用的对象,但创建起来很方便。下面的代码显示了如何创建一个类似(但更简单)的对象,该对象具有相同的基本财产。我真正想要的是一个MultiIndex数据帧,其中每个级别的索引都从该级别Series的相同名称继承其名称。
import random
import pandas as pd
def sertree(names):
if len(names) <= 1:
ga = pd.Series([random.randint(0,100) for x in range(5)], name='last')
gb = pd.Series([random.randint(0,100) for x in range(5)], name='last')
return pd.Series([ga,gb], index=[True,False], name=names[0])
else:
xa = sertree(names[1:])
xb = sertree(names[1:])
return pd.Series([xa,xb], index=[True,False], name=names[0])
pp = sertree(['top', 'next', 'end'])
n=4
while True:
print(f"{'':>{n}s}{pp.name}")
n+=4
if len(pp) > 2 : break
pp = pp[True]
top
next
end
last
我想要的是这样的东西。。。
midx = pd.MultiIndex.from_product([top,nxt,end,last],names=['top','next','end','last']) ;
midf = pd.DataFrame([random.randint(0,100) for x in range(len(midx))], index=midx, columns=['name'])
In [593]: midf.head(12)
Out[593]:
name
top next end last
True True True 0 99
1 74
2 16
3 61
4 3
False 0 44
1 46
2 59
3 14
4 82
False True 0 98
1 93
任何想法如何将我讨厌的“pp”转换为一个漂亮的DataFrame多索引,用一个漂亮Pandas方法,我都无法理解。重要的是在每个级别将系列名称保持为多索引名称。