首先,根据描述user和role是多对多的关系,一般这种情况通过中间userRole表来维护,user与userRole是一对多,并且role与userRole也是一对多。hibernate如果通过配置文件方式:在user配置中设置one-to-many,role配置文件同理;如果通过注解方式:@OneToMany
到目前为止我们关注的是保存在Pandas Series和DataFrame中的一维和二维数据。
通常超越二维的数据,即用两个以上键值索引的数据也是很有用的。
尽管Pandas提供了“Panel”和“Panel4D”对象来本地处理3维和4维数据,实践中更常用的方式是在单个索引中使用层次化索引(也叫多级索引)来包含多个索引。
以这种方式,高维数据可以被紧凑的表示在我们熟悉的一维Series和二维DataFrame对象中。
在这部分,我们将探索直接创建多级索引对象,仔细考虑对多级索引数据的索引,切片和计算统计,还会介绍对数据进行简单和层次化索引转换有用的函数。
我们以标准的导入开始:
让我们由考虑如果使用一维Series表达二维数据开始。具体讲,我们考虑那种带有字母和数字键值数据的Series。
假设你想要追踪两个不同年份的州数据。使用我们已经讲过的Pandas工具,你可能首先想到的是简单的使用Python元组作为键值:
使用这种索引方案,你可以直接基于多索引进行Series的索引和切片 *** 作:
但是便利也就到此为止了。例如,如果你需要选取所有2010年的值,你需要使用混乱(有可能缓慢的)方法才能实现:
这种方法得到了期待的结果,但它并不像我们喜爱的Pandas切片 *** 作那样简洁(在数据很大时,效率也不高)。
幸运的是,Pandas提供了一种更好的方法。我们基于元组的索引本质上来说是初级的多索引,Pandas的多级索引类型带来我们所希望的 *** 作类型。我们可以像下面这样通过元组创建多索引:
注意MultiIndex包含多个索引级别,在这个例子中,有州名称和年份,以及多个为每个数据点都记录层级的标签。
这里Series结果的头两列显示的是多索引值,第三行显示的是数据。注意第一列里面一些条目是空的:在多索引表达是,空位表示那里面的值与上一行的值一样。
现在访问第二个索引是2010的所有数据,我们就可以简单的使用Pandas切片记号:
结果是带有我们想要键值的单索引数组。跟我们开始时自制的基于元组的解决方法相比,现在的语法更简洁(执行效率也更高)。我们将会更深入的讨论这类在层级索引数据上面索引 *** 作。
这里你也许会注意到一点别的东西:我们可以很容易的使用带有索引和列标签的DataFrame来存储同样的数据。实际上,Pandas在设计时也想到了这种对等性。unstack()方法会快速的将多层索引Series转换成常用的DataFrame:
自然而然,stack()方法提供了相反的 *** 作:
看到这,您可能奇怪为什么我们还要麻烦的使用层级索引。原因很简单:就如我们可以用一维Series的多层级索引来表示二维数据一样,我们也能使用Series或DataFrame来表示三维或多维数据。多级索引中每个额外的层级代表数据的一个维度;这个属性为我们可以表示的数据类型带来许多灵活性。具体来讲,我们想要添加一列来表示每年的人口统计数据(比如,小于18岁的人口数);使用多级索引,就是简单的在DataFrame中添加一列:
另外,所有ufuncs和其他在Operating on Data in Pandas 讨论的功能都能在层次化索引上工作的很好。我们用上面的数据,来计算每年低于18岁的人口比例:
这使我们可以方便和快捷 *** 纵高维数据。
为Series和DataFrame创建多级索引最直接的方法就是传递两个或多个索引数组给构造器。例如:
创建索引的工作由后台去做。
类似的,如果你传递一个带有适当元组作为键值的字典的话,Pandas将会自动识别并且使用多级索引:
然而,有时候明确的创建多级索引也是很有用的;我们来看几个用法。
如何构造索引有更多的灵活性,你可以使用类构造方法pdMultiIndex。例如,如我们之前做的,可以通过给出了各级索引值的数组列表来构建多级索引:
也可以通过已经给出每个点多级索引值的元组列表来构建:
甚至可通过单索引的笛卡尔积来创建:
同样的,可以直接通过传递内部编码levels(包含每级可用索引值的列表)和lables(指代这些标签的列表)来构造多级索引:
所有这些对象,在创建Series或DataFrame时,都可用作为index参数传进去,或者传递给已经存在了的Series或DataFrame对象的reindex方法。
有时,给多级索引的层级命名时很有用的。命名可以通过names参数给MultiIndex构造器来实现,或者设置已有索引的names属性:
随着参与的数据集变多,给索引命名来记录不同索引的意义是非常有用的。
在DataFrame中,行和列是完全对称的,正如行有多级索引,列也可以有多级索引。考虑如下模拟的医疗数据:
我们很容易的得到了行和列的多级索引。这基本上是四维数据,访问对象,检查类型,年份和访问次数。有了这个,我们可以通过最上层人的名称来检索,并且能够得到只包含那个人信息的完整DataFrame:
对于包含多个标签涵盖多次,多个主题(人口,国家,城市等)的复杂数据记录,使用层级化的行和列索引将会极其方便!
多索引上面的检索和切片被设计的很直观,把索引当作是增加的维度将会很有帮助。
我们首先来看Series上的多索引检索,然后再看DataFrame上的。
考虑我们之前看到的州人口的多索引Series:
借助于多条目索引,我们可以访问单个数据元素:
MultiIndex也支持部分索引,或者只是检索索引层级中的一个。结果是另一个Series,保留着较低层的索引。
部分切片也是可用的,只要多级索引是排过序的(参见 Sorted and Unsorted Indices ):
对于排过序的索引,将前级索引置为空,基于低层级索引的检索 *** 作也可以执行:
其他类型的检索和筛选 *** 作(见 Data Indexing and Selection ) 工作的也很好;例如,基于布尔过滤筛选:
基于花式索引的筛选也可以工作:
DataFrame的多层索引的行为与Series类似。考虑前面用到的医疗数据DataFrame:
要记住列在DataFrame中是主要元素,用于Series的多级索引语法也适用于列。例如我们可以使用简单的方式获得Guido的心率:
同样,与单一索引情况一样,我们可以使用loc,iloc和ix 见 Data Indexing and Selection 。例如:
这些检索器在二维数据上需要提供数组类似输入,但可以把多索引元组传递给loc和iloc。例如:
在索引元组中使用切片不是特别方便;尝试在元组中使用切片将会导致语法错误:
可以通过显示使用Python内置的slice()函数构建期望的切片来绕过上面的限制。但更好的办法是使用IndexSlice对象,它是Pandas专门用来处理这种情形的。例如:
有许多方法可以同多索引Series和DataFrame进行交互,如同本书中的许多工具一样,最好的熟悉方法是多尝试!
使用多索引数据的一个关键是知道如何有效的转换数据。有许多 *** 作会保留数据集的所有信息,但为了不同的目的而对它进行重拍。我们看过简短的例子:stack()和unstack()方法;但是有更多方法可以精细的控制数据在层级索引和列直接进行转换,让我们来探索它们:
之前我们曾经有警告,但在这里应该强调一下如果索引是未排序的话,许多多索引切片 *** 作将会失败。
我们由创建一些简单的未排序多索引数据开始:
如果对这个索引进行部分切片的话,它将导致一个错误:
尽管错误信息不是特别清楚,原因是多级索引没有排序。因为各种原因,部分切片和其它类似 *** 作要求多级索引的各个层级是排序了的。Pandas提供了几种方法的函数来执行这类排序;例如DataFrame的sort_index()和sortlevel()方法。这儿我们使用最简单的sort_index():
索引经过这样的排序,部分切片就会按期望的工作了:
我们前面简要的见过,可以将聚集的多索引转换未简单的二维表现,所使用的层级是可以选的:
unstack()的反向 *** 作是stack(),它可以用来恢复原始的Series:
另一种重排层级化数据的方法是将索引标签变成列;这可以通过reset_index方法实现。在人口字典上调用这个方法会导致原来index里面的state和year信息变成DataFrame对应的列。为清晰起见,我们可以指定数据列显示的名称:
通常在现实世界中,原始的输入数据就是这个样子的。通过列名称来构建多索引非常有用。可以同DataFrame的set_index方法来实现,结果返回的就是多级索引DataFrame:
在实践中,我发现这类重置索引的方法是处理真实数据集最有用的模式之一。
我们之前看到过Pandas的内部数据聚合方法,例如mean(),sum()和max()。对于层级索引数据,可以传递一个level参数来控制对那个数据子集进行计算。例如,我们回到健康数据:
也许我们想平均一下每年两次来访的测量值。我们可以通过指定想要的索引层级名称来实现,本例使用的是year:
借助于使用关键字axis,我们也可以获取列中某层级的均值:
只用了两行,我们就能够发现访问对象的每年平均心率和体温测量值。这个语法实际是Groupby功能的快捷方法,见 Aggregation and Grouping
虽然这只是一个小例子,许多真实的数据集由相似的层级结构。
Pandas还有几种我们没有讲到的数据类型,即pdPanel和pdPanel4D对象。它们分别可以被看做是泛化的3维和4维结构,就像Serie是一维,DataFrame是二维一样。一旦熟悉了Series和DataFrame的索引和数据 *** 作,对Panel和Panel4D基本可以直接使用。特别是索引器ix,loc和iloc,它们完全适用于这些高维数据结构。
我们不会再覆盖这些面板结构,因为我发现在大多数情况下,多级索引是非常有用的,并且可以在概念上非常简洁的表示高维数据。另外面板数据是密数据表达,而多级索引基本上是稀数据表达。随着维度的增加,密表达方式对于真实数据集来说变得效率很低。但对于一些特殊的应用,这些结构也很有用。如果想要知道更多关于Panel和Panel4D结构,请看列在 Further Resources 中的参考文献。
=# jQuery :eq() 选择器
jQuery 选择器]( >
以上就是关于求助,Hibernate 一对多List元素 index怎么配置全部的内容,包括:求助,Hibernate 一对多List元素 index怎么配置、5.层次化索引、jQuery选择存在的多个class的其中一个的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)