在 pandas 中切片 MultiIndexed DataFrame
Slicing MultiIndexed DataFrame in pandas
我有以下 DataFrame
名为 pop:
California 2000 33871648
2010 37253956
New York 2000 18976457
2010 19378102
Texas 2000 20851820
2010 25145561
我想打印出加利福尼亚州和德克萨斯州 2010 年的数值。每当我尝试 pop[['California','Texas'], 2010]
时,我都会遇到错误 '(['California', 'Texas'], 2010)' is an invalid key
那我怎么打印信息呢?
TLDR
df.loc[(level_1_indices_list, level_2_indices_list), :]
在这种情况下是:
df.loc[(['California','Texas'], ['2010']), :]
下面是更详尽的版本。
# import packages & set seed
import numpy as np
import pandas as pd
np.random.seed(42)
创建示例数据框
arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']),
np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])]
s = pd.Series(np.random.randn(8), index=arrays)
df = pd.DataFrame(np.random.randn(8, 4), index=arrays)
这看起来像:
使用多索引切片
使用 df
你可以:
df.loc[(['qux','foo'], 'one'), :]
为了符号的一致性,您可以在切片的第二个元素上使用 []
:
df.loc[(['qux','foo'], ['one']), :]
这将产生相同的结果。
即:
(选择 'one'
相当于在 df
中选择 2010
。['qux','foo']
应该相当于选择 ['California' ,'Texas']。基于此,我认为您可以将此处的步骤应用于您的数据。)
也可能有帮助。
我想要指定列名,可以通过添加更多 &
来进一步扩展
df.loc[(df['level_0'].isin(['California', 'Texas'])) & (df['level_1'].isin(['2010']))]
我有以下 DataFrame
名为 pop:
California 2000 33871648
2010 37253956
New York 2000 18976457
2010 19378102
Texas 2000 20851820
2010 25145561
我想打印出加利福尼亚州和德克萨斯州 2010 年的数值。每当我尝试 pop[['California','Texas'], 2010]
时,我都会遇到错误 '(['California', 'Texas'], 2010)' is an invalid key
那我怎么打印信息呢?
TLDR
df.loc[(level_1_indices_list, level_2_indices_list), :]
在这种情况下是:
df.loc[(['California','Texas'], ['2010']), :]
下面是更详尽的版本。
# import packages & set seed
import numpy as np
import pandas as pd
np.random.seed(42)
创建示例数据框
arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']),
np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])]
s = pd.Series(np.random.randn(8), index=arrays)
df = pd.DataFrame(np.random.randn(8, 4), index=arrays)
这看起来像:
使用多索引切片
使用 df
你可以:
df.loc[(['qux','foo'], 'one'), :]
为了符号的一致性,您可以在切片的第二个元素上使用 []
:
df.loc[(['qux','foo'], ['one']), :]
这将产生相同的结果。
即:
(选择 'one'
相当于在 df
中选择 2010
。['qux','foo']
应该相当于选择 ['California' ,'Texas']。基于此,我认为您可以将此处的步骤应用于您的数据。)
我想要指定列名,可以通过添加更多 &
df.loc[(df['level_0'].isin(['California', 'Texas'])) & (df['level_1'].isin(['2010']))]