gpt4 book ai didi

在pandas多重索引multiIndex中选定指定索引的行方法

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章在pandas多重索引multiIndex中选定指定索引的行方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

在multiindex中选定指定索引的行 。

我们在用pandas类似groupby来使用多重index时,有时想要对多个level中的某个index对应的行进行操作,就需要在dataframe中找到该index对应的行,在单层index中我们可以方便的使用df.loc[index]来选择,在多重index中我们可以利用的类似的思路,然而其中也有一些小坑,记录如下.

1 index为有序的 。

1.1 创建测试数据 。

首先创建一个dataframe数据 。

?
1
2
3
df = pd.dataframe({ 'class' :[ 'a' , 'a' , 'a' , 'b' , 'b' , 'b' , 'c' , 'c' ],
    'id' :[ 'a' , 'b' , 'c' , 'a' , 'b' , 'c' , 'a' , 'b' ],
    'value' :[ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ]})

df中内容如下图:

在pandas多重索引multiIndex中选定指定索引的行方法

1.2 设置multiindex 。

通过set_index设为多重索引 。

?
1
df = df.set_index([ 'class' , 'id' ])

设置索引后效果:

在pandas多重索引multiIndex中选定指定索引的行方法

1.3 切片筛选index 。

这里同样使用loc定位 。

?
1
df.loc[( 'a' , slice (none)),:]

各参数的解释如下:

loc[(a,b),c]中第一个参数元组为索引内容,a为level0索引对应的内容,b为level1索引对应的内容 。

因为df是一个dataframe,所以要用c来指定列 。

这里‘a',指选择class中的a类 。

slice(none), 是python中的切片操作,这里用来选择任意的id,要注意!不能使用‘:'来指定任意index 。

‘:',用来指定dataframe任意的列 。

执行后的结果如下:

在pandas多重索引multiIndex中选定指定索引的行方法

同样,如果想只保留id中的'a',则可以使用:

?
1
df.loc[( slice (none), 'a' ),:]

2 index无序 。

前面的例子对应的index列为数字或字母,是有序的,接下来我们看看index列为中文的情况.

2.1 创建无序测试数据 。

?
1
2
df2 = pd.dataframe({ '课程' :[ '语文' , '语文' , '数学' , '数学' ], '得分' :[ '最高' , '最低' , '最高' , '最低' ], '分值' :[ 90 , 50 , 100 , 60 ]})
df2 = df2.set_index([ '课程' , '得分' ])

在pandas多重索引multiIndex中选定指定索引的行方法

2.2 尝试切片选择index 。

?
1
df2.loc[( '语文' , slice (none)),:]

我们进行同样的操作,这时会发现提示出错:

unsortedindexerror: 'multiindex slicing requires the index to be fully lexsorted tuple len (2), lexsort depth (0)' 。

这是因为此时的index无法进行排序,在pandas文档中提到:furthermore if you try to index something that is not fully lexsorted, this can raise

我们可以通过 df2.index.is_lexsorted()来检查index是否有序, 。

?
1
2
in [ 1 ]: df2.index.is_lexsorted()
out[ 1 ]: false

接下来,我们尝试对index进行排序。(排序时要在level里指定index名) 。

2.3 对index排序后切片选择index 。

?
1
df2 = df2.sort_index(level = '课程' )
?
1
df2.loc[( '语文' , slice (none)),:]

在pandas多重索引multiIndex中选定指定索引的行方法

得到了我们想要的结果.

参考文献:pandas-docs-multiindex / advanced indexing 。

以上这篇在pandas多重索引multiindex中选定指定索引的行方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.

原文链接:https://blog.csdn.net/PIPIXIU/article/details/80232805 。

最后此篇关于在pandas多重索引multiIndex中选定指定索引的行方法的文章就讲到这里了,如果你想了解更多关于在pandas多重索引multiIndex中选定指定索引的行方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

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