在多级数据帧中选择特定的索引单元格值



我有一个包含以下信息的多级数据帧:

A  B  123  1     value1      value2
654  2     value3      value4
C  D  543  2     value1      value2
999  2     value5      value7

例如,我想使用索引值A和B(或C和D(仅选择一个值123、654或543等(索引的一部分(。值A、B、C、D是有限的,因此可以很容易地根据循环中的列表进行搜索。但值123、654或543的范围从0到20000,所以使用for循环来获取它会使事情变得非常缓慢。

谢谢。提供更多详细信息:我正在尝试使用循环访问数据帧df(由您在回答中创建(。df是一个大数据帧。

在此处输入代码

# Dataframe df1 have 2 columns with with subset of values in level0 and      #level1 of df1.
for index1 in range(len(df1)):
for index2 in range(len(df1)):
# x, y will fetch particular value of level0 & level1 respectively
x = df1.loc[(index1),'level0column']
y = df1.loc[(index2),'level1column']
# Trying to get values for level2 values
for level2ids in range(20000):
for level3ids in range(2):
total1 =  df.loc[(x,y, level2ids,level3ids), 'value_x']
......

要替换下面的代码行。

# Trying to get values for level2 values
for level2ids in range(20000):

由于df是一个大数据帧,并且我在运行时获取级别0和级别1的值,所以我想在运行时也获取级别2的值。为级别0和级别1的特定值获取级别2的值将只给我一个值非常少的列表。不知道这是否可能,也不知道我是否要澄清我的问题。

如果您的数据帧如下所示:

df = pd.DataFrame({'level0':['A','A','C','C'],
'level1':['B','B','D','D'],
'level2':[123,654,543,999],
'level3':[1,2,2,2],
'value_x':['value1','value3','value1','value5'],
'value_y':['value2','value4','value2','value7']})
# set the index
df.set_index(['level{}'.format(i) for i in range(4)], inplace=True)

返回:

value_x value_y
level0  level1  level2  level3      
A       B      123       1    value1  value2
654       2    value3  value4
C       D      543       2    value1  value2
999       2    value5  value7

您应该能够使用基于标签的索引机制:

df.loc[('A','B',123,1),:]

返回:

value_x    value1
value_y    value2
Name: (A, B, 123, 1), dtype: object

最新更新