Python 如何创建具有多级列的数据帧?
现有的一个问题涉及一个非常“常规”的数据框架,其中所有列和行都是产品,所有数据都存在 唉,我的情况不同了。我有这样的数据: <代码>[{street”:“Euclid”,“house”:42,“area”:123,(1,“卧室”):1,(1,“浴室”):4}, {“街道”:“欧几里德”,“房子”:19,“面积”:234,(2,“卧室”):3,(2,“浴室”):3}, {“街道”:“黎曼”,“房子”:42,“面积”:345,(1,“卧室”):5, (1,“浴室”):2,(2,“卧室”):12,(2,“浴室”):17}, {“街”:“里曼”,“房子”:19,“面积”:456,(1,“卧室”):7,(1,“浴室”):1}] 我想要这种Python 如何创建具有多级列的数据帧?,python,pandas,multi-level,Python,Pandas,Multi Level,现有的一个问题涉及一个非常“常规”的数据框架,其中所有列和行都是产品,所有数据都存在 唉,我的情况不同了。我有这样的数据: [{street”:“Euclid”,“house”:42,“area”:123,(1,“卧室”):1,(1,“浴室”):4}, {“街道”:“欧几里德”,“房子”:19,“面积”:234,(2,“卧室”):3,(2,“浴室”):3}, {“街道”:“黎曼”,“房子”:42,“面积”:345,(1,“卧室”):5, (1,“浴室”):2,(2,“卧室”):12,(2,“浴室
DataFrame
,行和列都有多级索引:
area 1 2
street house bedrooms bathrooms bedrooms bathrooms
Euclid 42 123 1 4
Euclid 19 234 3 3
Riemann 42 345 5 2 12 17
Riemann 19 456 7 1
因此,行索引应该是
MultiIndex([(“欧几里德”,42),(“欧几里德,19),(“黎曼,42),(“黎曼,19)],
名称=[“街道”、“房屋”])
列索引应该是
MultiIndex([(“面积”,无),(1,“卧室”),(1,“浴室”),(2,“卧室”),(2,“浴室”)],
名称=[“楼层”、“实体”])
我认为没有办法从我拥有的字典列表中生成这些索引。我觉得应该有比这更好的东西;希望有人能做得更好: 创建一个函数来处理字典中的每个条目:
def process(entry):
#read in data and get the keys to be the column names
m = pd.DataFrame.from_dict(entry,orient='index').T
#set index
m = m.set_index(['street','house'])
#create multi-index columns
col1 = [ent[0] if isinstance(ent,tuple) else ent for ent in m.columns ]
col2 = [ent[-1] if isinstance(ent,tuple) else None for ent in m.columns ]
#assign multi-index column to m
m.columns=[col1,col2]
return m
将上述函数应用于数据(我将字典包装到数据变量中):
连接以获得最终输出
pd.concat(res)
area 1 2
NaN bedrooms bathrooms bedrooms bathrooms
street house
Euclid 42 123 1 4 NaN NaN
19 234 NaN NaN 3 3
Riemann 42 345 5 2 12 17
19 456 7 1 NaN NaN
pd.concat(res)
area 1 2
NaN bedrooms bathrooms bedrooms bathrooms
street house
Euclid 42 123 1 4 NaN NaN
19 234 NaN NaN 3 3
Riemann 42 345 5 2 12 17
19 456 7 1 NaN NaN