gpt4 book ai didi

python - 如何使用第二个索引列从索引的 pandas DataFrame 中选择行?

转载 作者:太空宇宙 更新时间:2023-11-03 17:47:11 29 4
gpt4 key购买 nike

这是一个简单的 pandas DataFrame,具有两级索引和单值列:

            value 
| k1 | k2 | |
+----+----+-------+
| a | b | c |
| d | e | f |
| g | h | i |

我可以使用 k1 选择行,如下所示:

df.loc[['a','d'], :]

并得到:

            value 
| k1 | k2 | |
+----+----+-------+
| a | b | c |
| d | e | f |

但是,当尝试对 k2 进行相同操作时,如下所示:

df.loc[:, ['b','e']]

我收到 KeyError:“[['b', 'e']] 均不在 [列] 中”

我在这里缺少什么?

最佳答案

你可以这样做:

df.loc[(slice(None), ['b', 'e']), :]

更详细的解释:

执行df.loc[idx_row, idx_col]时,索引器“idx_row”(在您的情况下为列表['a','d'])索引行(因此您的多重索引),而“idx_col”(在您的情况下 :)对列进行索引(在本例中:所有列)。
因此,您想在行索引器('idx_row')中指定多索引的两个级别。当你想从第二层选择时,你必须指定你想要使用切片包含第一层的所有元素,因此 'idx_row' 变成 (:, ['b', 'e']) 。唯一的问题是您不能在元组内使用 :,因此您需要使用等效的 slice(None)
Pandas 提供了一个小解决方法,不必使用更详细的切片:

idx = pd.IndexSlice
df.loc[idx[:, ['b', 'e']], :]

请参阅有关此内容的文档:http://pandas.pydata.org/pandas-docs/stable/advanced.html#using-slicers

关于python - 如何使用第二个索引列从索引的 pandas DataFrame 中选择行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29622654/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com