我希望从多索引 DataFrame 中提取值,该 df 有两个索引,a_idx 和 b_idx。要提取的值即 (1,1)
[in] df.loc[(1, 1), :]
[out] 0
Name: (1, 1), dtype: int64
这正如预期的那样。但是如果我想获得两个值(1,2)和(2,3):
[in] df.loc[([1, 2], [2, 3]), :]
[out]
value
a_idx b_idx
1 2 1
3 6
2 2 3
3 9
这不是我想要的,我需要特定的对,而不是 4 个值。
此外,我希望使用两个数组 select_a 和 select_b: .loc[[ 来从该数据库中选择元素,它们的长度彼此相同,但与数据帧不同。所以对于
select_a = [1, 1, 2, 2, 3]
select_b = [1, 3, 2, 3, 1]
我的要点是我应该使用以下方法来做到这一点:
df.loc[(select_a, select_b), :]
然后收到包含 a_idx==select_a[i] and b_idx==select_b[i] for all i in len(select_a)
的所有项目的列表。
我尝试过 xs 和切片索引,但这没有返回所需的结果。我采用索引方法的主要原因是计算速度,因为真实数据集实际上有 430 万行,而需要创建的数据集甚至更多。
如果这不是实现此结果的最佳方法,请为我指出正确的方向。也欢迎任何来源,我在 pandas 文档中发现的内容并不适合这种索引(或者至少我无法找到它)
数据框是使用以下代码创建的:
numbers = pd.DataFrame(np.random.randint(0,10,10), columns=["value"])
numbers["a"] = [1, 1, 1, 1, 2, 2, 2, 3, 3, 3]
numbers["b"] = [1, 2, 3, 4, 1, 2, 3, 1, 2, 3]
print("before adding the index to the dataframe")
print(numbers)
index_cols = pd.MultiIndex.from_arrays(
[numbers["a"].values, numbers["b"].values],
names=["a_idx", "b_idx"])
df = pd.DataFrame(numbers.values,
index=index_cols,
columns=numbers.columns.values)
df = df.sort_index()
df.drop(columns=["a","b"],inplace=True)
print("after adding the indexes to the dataframe")
print(df)
最佳答案
你就快到了。要获取这些索引对,您需要使用如下语法:
df.loc[[(1, 2), (2, 3)], :]
您还可以使用 select_a
和 select_b
来执行此操作。只需确保将这些对作为元组传递给 df.loc 即可。
关于python - 使用数组从多重索引中选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56912072/