【发布时间】:2020-02-17 20:37:44
【问题描述】:
首先让我们假设我有一个带有单个索引的 pandas 数据框。如果我使用.loc[] 选择索引“A”两次,它将返回索引“A”重复两次的数据帧:
df_1 = pd.DataFrame([1,2,3], index=['A','B','C'], columns=['Col_1'])
df_1
Col_1
A 1
B 2
C 3
df_1.loc[['A','A','B']]
Col_1
A 1
A 1
B 2
现在假设我们有一个带有多索引的数据框。如果我使用.loc[] 两次选择索引“A”,它将返回一个仅包含一次索引“A”的数据帧:
ix = pd.MultiIndex.from_product([['A', 'B', 'C'], ['foo', 'bar']], names=['Idx1', 'Idx2'])
data = np.arange(len(ix))
df_2 = pd.DataFrame(data, index=ix, columns=['Col_1'])
df_2
Col_1
Idx1 Idx2
A foo 0
bar 1
B foo 2
bar 3
C foo 4
bar 5
df_2.loc[['A','A','B']]
Col_1
Idx1 Idx2
A foo 0
bar 1
B foo 2
bar 3
有没有办法使用.loc选择多索引级别的重复值?
【问题讨论】:
-
由于 A 本身是重复的,所以第一级有两个 A ...
-
pd.concat(df_2.loc[x] for x in ['A','A','B'])? -
foo/bar 级别的 tile 排序是否重要,还是有 [(A, foo) (A, foo) (A, bar) (A, bar)] 就足够了?跨度>
-
我用另一种方法更新了我的答案。
标签: python pandas multi-index