Python 在多级数据帧中选择特定的索引单元格值
我有一个包含以下信息的多级数据帧:Python 在多级数据帧中选择特定的索引单元格值,python,dataframe,Python,Dataframe,我有一个包含以下信息的多级数据帧: 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
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是一个大数据帧,我在运行时获取level0和level1的值,所以我想在运行时也获取level2的值。对于level0和level1的特定值,获取level2的值只能得到一个值非常少的列表。
不知道这是否可能,也不知道我是否要澄清我的问题。如果您的数据框如下所示:
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
value_x value1
value_y value2
Name: (A, B, 123, 1), dtype: object
您应该能够使用以下机制:
返回:
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
value_x value1
value_y value2
Name: (A, B, 123, 1), dtype: object
如果您的数据帧如下所示:
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
value_x value1
value_y value2
Name: (A, B, 123, 1), dtype: object
您应该能够使用以下机制:
返回:
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
value_x value1
value_y value2
Name: (A, B, 123, 1), dtype: object
你好,你能再澄清一下吗?例如,A、B、123和1(在第一行)都是行索引吗?您好,您能提供更多的说明吗?例如,A、B、123和1(在第一行中)都是行索引吗?