使用给定的索引列表从多索引数据框中获取数据
Get data from multiindexed dataframe with given a list of index
我想从具有多个索引的某个 pandas 数据帧中名为 'index' 的列中获取信息。但应列出索引。请看下面的例子。
index ID
0 0 1.0 17226815
1 0 2.0 17226807
2 0 3.0 17226816
3 0 4.0 17226808
4 0 5.0 17231739
5 0 6.0 17231739
6 0 1.0 17226815
1 2.0 17226807
7 0 1.0 17226815
1 3.0 17226816
filtered_list = [3, 5, 7]
用下面一行我可以得到过滤后的数据。
print(df.loc[df.index.isin(filtered_list, level=0)]['index'])
输出:
3 0 4.0
5 0 6.0
7 0 1.0
1 3.0
我想要得到的是一个由'index'值组成的列表。然后它将作为过滤索引旁边的附加信息。显示如下:
0 3 4
1 5 6
2 7 (1, 3)
我怎样才能得到这个列表?
提前致谢。
如果我没理解错的话,
df.loc[filtered_list,'index'].groupby(level=0).apply(tuple).reset_index()
输出:
0 index
0 3 (4.0,)
1 5 (6.0,)
2 7 (1.0, 3.0)
更进一步:
df.loc[filtered_list,'index']\
.groupby(level=0)\
.apply(lambda x: tuple(x)[0] if len(x.index)==1 else tuple(x))\
.reset_index()
输出:
0 index
0 3 4
1 5 6
2 7 (1.0, 3.0)
我想从具有多个索引的某个 pandas 数据帧中名为 'index' 的列中获取信息。但应列出索引。请看下面的例子。
index ID
0 0 1.0 17226815
1 0 2.0 17226807
2 0 3.0 17226816
3 0 4.0 17226808
4 0 5.0 17231739
5 0 6.0 17231739
6 0 1.0 17226815
1 2.0 17226807
7 0 1.0 17226815
1 3.0 17226816
filtered_list = [3, 5, 7]
用下面一行我可以得到过滤后的数据。
print(df.loc[df.index.isin(filtered_list, level=0)]['index'])
输出:
3 0 4.0
5 0 6.0
7 0 1.0
1 3.0
我想要得到的是一个由'index'值组成的列表。然后它将作为过滤索引旁边的附加信息。显示如下:
0 3 4
1 5 6
2 7 (1, 3)
我怎样才能得到这个列表?
提前致谢。
如果我没理解错的话,
df.loc[filtered_list,'index'].groupby(level=0).apply(tuple).reset_index()
输出:
0 index
0 3 (4.0,)
1 5 (6.0,)
2 7 (1.0, 3.0)
更进一步:
df.loc[filtered_list,'index']\
.groupby(level=0)\
.apply(lambda x: tuple(x)[0] if len(x.index)==1 else tuple(x))\
.reset_index()
输出:
0 index
0 3 4
1 5 6
2 7 (1.0, 3.0)