层次化索引是你能在一个数组上拥有多个索引,例如:
有点像Excel里的合并单元格对么?
以外层索引的方式选择数据子集:
以内层索引的方式选择数据:
层次化索引在数据重塑和分组中扮演着很重要的角色,例如,上面的层次化索引数据可以转换为一个DataFrame:
对于一个DataFrame,横轴和竖轴都可以有层次化索引,例如:
重排分级顺序
swaplevel()函数可以将两个级别的数据进行交换,例如:
sortlevel()函数根据单个级别的值对数据进行排序,例如:
以行按第一层进行排序:
以行按第二层进行排序:
以列按第一层进行排序:
s = raw_input()
lines = ssplit('\n')
dictlines = lines[:100]
mydict = {}
# read
for i,line in enumerate(dictlines ):
for word in linesplit():
mydictsetdefault(word,[])append(i + 1)
# print indices
for word in mydictkeys():
print "%s: %s" % (word,", "join(map(str,sorted(mydict[word]))))
def andSearch(words_list):
global mydict
a = set(range(1,101))
for word in words_list:
a = aintersection(set(mydict[word]))
return a
def orSearch(words_list):
global mydict
a = set([])
for word in words_list:
a = aunion(set(mydict[word]))
return a
# Query
index = 100
u = lines[index]
while index < len(lines):
words_list = usplit()
if ":" in u:
if words_list[0] == "OR:":
a = orSearch(words_list)
else:
if words_list[0] == 'AND:':
words_list = words_list[1:]
a = andSearch(words_list)
if not a:
print ", "join(map(str,list(a)))
else:
print "None"
index += 1
大致思想就是这样。。。。。。。。
numpy中有函数argsort来返回排序后的下标
结果
pytorch中的torchsort本身就能返回排序后的下标
Python中没有直接调用的接口,怎么办呢?
用enumerate再排序就可以了
结果
用oswalk(path)遍历文件夹A得到A文件夹下所有的文件以及目录,根据获取到的所有的文件名,通过if name in file_name 来过滤出你要的文件
import os
for root, path, names in oswalk(r'D:\test'):
print(root, path, names)
for name in names:
if 'a' in name:
print('---------')
print(name)
print('---------')
a = {'一': ["A", "B", "C"], '二': ["D", "E", "F"]}
b = list(avalues())
print(b[1]) # ['D', 'E', 'F']
只有通过遍历得到。 这个应该没有直接获取的方式方法。 遍历这个数组,当然维数不确定的话你就需要使用递归,然后一一判断它的值是否为你指定的值,然后输出索引。 另外,建议不要匿名提问,因为这会让很多高手不屑于回答你的问题。
从语法上将 MultiIndex 与 loc 集成在高级索引中是有些挑战性。通常, MultiIndex 的键采用元组的形式。例如
注意 : 虽然也可以使用 dfloc['bar', 'two'] ,但这种简写的符号通常会导致歧义
如果你还想用 loc 索引某一列,你必须像这样使用一个元组
想要获取第一个级别的某一标签的所有元素,并不需要传递元组,例如
而不是使用 dfloc[('bar',),] (等价于 dfloc['bar',] )
当然,也可以进行切片
通过提供一个元组切片,选择范围内的值
传递一个标签或元组列表的工作原理类似于 reindex
需要注意的是,在 pandas 中,当涉及到索引时,元组和列表的处理方式并不相同。
元组被解释为一个多级键,而列表则用来指定多个键。或者换句话说,元组是横向的,列表是纵向的
您可以通过提供多个索引器来对 MultiIndex 进行切片
可以使用 slice(None) 选择该级别的所有内容,没有指定索引的级别默认为 slice(None)
通常,切片的两段都会包括在内,因为这是标签索引
在使用 loc 的时候,最好同时指定索引(行)和标签(列),因为在某些情况下,传递的索引可能会被解析为两个轴而不是 MultiIndex
你应该使用
而不是
例如
使用切片,列表和标签的基本 MultiIndex 切片 *** 作
你可以使用 pandasIndexSlice 来让 : 语法显得更自然一些,而不是使用 slice(None)
可以使用这种方法在多个轴同时进行相当复杂的选择
您可以使用布尔索引器来进行与值相关的选择
您还可以为 loc 指定 axis 参数,以在某一个轴上传递切片
此外,您可以使用以下方法设置这些值
也可以在等号右边使用可对齐对象
DataFrame 的 xs() 方法还接受一个 level 参数,以便更容易在 MultiIndex 的特定级别上选择数据
使用切片
您还可以为 xs 提供 axis 参数来选择列
使用切片
xs 还允许使用多个键进行选择
使用切片
您可以将 drop_level=False 传递给 xs ,以保留所选择的级别
使用 drop_level=True (默认值)与上面的结果比较
在 pandas 对象的 reindex() 和 align() 方法中使用 level 参数,可以在一个级别上广播值
swaplevel() 方法可以切换两个级别的顺序
reorder_levels() 方法是 swaplevel 方法的推广,允许你在一个步骤中排列分层索引级别
rename() 方法可用于重命名 MultiIndex 的标签,通常用于重命名 DataFrame 的列
rename 的 columns 参数允许指定需要重命名的列的字典
这个方法也可以用来重命名 DataFrame 主索引的特定标签
rename_axis() 方法用于重命名 Index 或 MultiIndex 的名称。
特别地,可以指定 MultiIndex 的级别名称,可以使用 reset_index() 将 MultiIndex 移动到列
注意 : DataFrame 的列是一个索引,因此使用 rename_axis 和 columns 参数可以改变该索引的名称
rename 和 rename_axis 都支持指定字典、 Series 或映射函数来将标签/名称映射到新值
当直接使用 Index 对象而不是通过 DataFrame 工作时,可以使用 Indexset_names() 来更改名称
您不能通过 level 设置 MultiIndex 的名称
使用 Indexset_names() 替代
以上就是关于python怎么打开层次化索引全部的内容,包括:python怎么打开层次化索引、python倒排索引(Inverted index)、python列表排序并返回索引等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)