我正在尝试使用.loc索引和标签列表从两级熊猫MultiIndex数据框中选择行(包括重复)。
但是,如果我尝试使用MultiIndex数据帧进行这种类型的索引编制,则输出的行顺序与输入的顺序相同,并且忽略重复的索引。这是一个例子:
import numpy as np
import pandas as pd
import string as s
index1 = list(s.ascii_uppercase[:4])
index2 = np.arange(2)
col_names='col1 col2 col3'.split()
new_slices = list('DDAB') # note order and repition of labels
multi_index = pd.MultiIndex.from_product([index1,index2],names=["level0","level1"])
data = np.arange(len(index1)*len(index2)*len(col_names))
data=data.reshape(len(index1)*len(index2),-1)
df2 = pd.DataFrame(data,columns=col_names,index=multi_index)
print(df2.loc[new_slices])
col1 col2 col3
level0 level1
A 0 0 1 2
1 3 4 5
B 0 6 7 8
1 9 10 11
D 0 18 19 20
1 21 22 23
我反而希望:
col1 col2 col3
level0 level1
D 0 18 19 20
1 21 22 23
D 0 18 19 20
1 21 22 23
A 0 0 1 2
1 3 4 5
B 0 6 7 8
1 9 10 11
我是否错过了特定于MultiIndex的功能?还是我误解了MultiIndex中的级别如何工作?
(但是,这在我从“常规”数据帧中进行选择时可以达到预期效果,例如:]]
import numpy as np import pandas as pd import string as s index1 = list(s.ascii_uppercase[:4]) col_names='col1 col2 col3'.split() new_slices = list('DDAB') # note order and repition of labels data1 = np.arange(len(index1)*len(col_names)).reshape(len(index1),-1) df1 = pd.DataFrame(data1,columns=col_names,index=index1) print(df1) print(df1.loc[new_slices])
这给出了我期望的结果-具有D,D,A,B行的数据框。
我正在尝试使用.loc索引和标签列表从两级熊猫MultiIndex数据框中选择行(包括重复)。但是,如果我尝试使用MultiIndex进行这种类型的索引编制...
您什么都没错过。这是熊猫实现索引的方式的结果。部分索引不会重复行,而只会完全索引。
以这种方式尝试