当前位置: 首页 > 面试题库 >

给列提供多个索引/标题

奚曦哲
2023-03-14
问题内容

我正在使用基本上是时间序列的熊猫数据帧,如下所示:

             level
Date              
1976-01-01  409.67
1976-02-01  409.58
1976-03-01  409.66
…

我想要拥有的是level列的多个索引/标题,如下所示:

           Station1                   #Name of the datasource
           43.1977317,-4.6473648,5    #Lat/Lon of the source
           Precip                     #Type of data
Date              
1976-01-01  409.67
1976-02-01  409.58
1976-03-01  409.66
…

所以基本上我正在寻找类似的东西Mydata.columns.level1 = ['Station1']Mydata.columns.level2 = [Lat,Lon]Mydata.columns.level3 = ['Precip']

原因是一个位置可以有多个数据集,而我希望能够从一个合并的大数据框中选择一个位置的所有数据,或者所有位置的特定类型的所有数据。

我可以从pandas文档中设置一个示例数据框,并测试我的选择,但是对于我的真实数据,我需要像示例中那样以不同的方式设置索引。

例:

建立一个小数据框

header = [np.array(['location','location','location','location2','location2','location2']), 
np.array(['S1','S2','S3','S1','S2','S3'])] 
df = pd.DataFrame(np.random.randn(5, 6), index=['a','b','c','d','e'], columns = header )

df
    location                      location2                    
         S1        S2        S3         S1        S2        S3
a -1.469932 -1.544511 -1.373463  -0.317262  0.024832 -0.641000
b  0.047170 -0.339423  1.351253   0.601172 -1.607339  0.035932
c -0.257479  1.140829  0.188291  -0.242490  1.019315 -1.163429
d  0.832949  0.098170 -0.818513  -0.070383  0.557419 -0.489839
e -0.628549 -0.158419  0.366167  -2.319316 -0.474897 -0.319549

选择数据类型或位置:

df.loc(axis=1)[:,'S1']

   location  location2
         S1         S1
a -1.469932  -0.317262
b  0.047170   0.601172
c -0.257479  -0.242490
d  0.832949  -0.070383
e -0.628549  -2.319316

df['location']

         S1        S2        S3
a -1.469932 -1.544511 -1.373463
b  0.047170 -0.339423  1.351253
c -0.257479  1.140829  0.188291
d  0.832949  0.098170 -0.818513
e -0.628549 -0.158419  0.366167

还是我只是在寻找错误的术语?因为文档中所有示例的90%,以及此处的问题仅将垂直的“材料”(在我的情况下为日期或abcde)视为索引,而快速浏览df.index.values测试数据也只会使我获得垂直的信息array(['a','b', 'c', 'd', 'e'], dtype=object)


问题答案:

您可以使用multiIndex来为多个列指定每个级别的名称。用于MultiIndex.from_product()从多个可迭代的笛卡尔乘积中生成multiIndex。

header = pd.MultiIndex.from_product([['location1','location2'],
                                     ['S1','S2','S3']],
                                    names=['loc','S'])
df = pd.DataFrame(np.random.randn(5, 6), 
                  index=['a','b','c','d','e'], 
                  columns=header)

loc和S两个级别。

df
loc location1                     location2                    
S          S1        S2        S3        S1        S2        S3
a   -1.245988  0.858071 -1.433669  0.105300 -0.630531 -0.148113
b    1.132016  0.318813  0.949564 -0.349722 -0.904325  0.443206
c   -0.017991  0.032925  0.274248  0.326454 -0.108982  0.567472
d    2.363533 -1.676141  0.562893  0.967338 -1.071719 -0.321113
e    1.921324  0.110705  0.023244 -0.432196  0.172972 -0.50368

现在,您可以使用xs根据级别对日期框架进行切片。

df.xs('location1',level='loc',axis=1)

S        S1        S2        S3
a -1.245988  0.858071 -1.433669
b  1.132016  0.318813  0.949564
c -0.017991  0.032925  0.274248
d  2.363533 -1.676141  0.562893
e  1.921324  0.110705  0.02324

df.xs('S1',level='S',axis=1)

loc  location1  location2
a    -1.245988   0.105300
b     1.132016  -0.349722
c    -0.017991   0.326454
d     2.363533   0.967338
e     1.921324  -0.43219


 类似资料:
  • 问题内容: 我在MySQL数据库中有下表: SQL将如下所示: 如您所见,我同时创建了primaryId和和imgDate索引键。我的想法是,该WHERE子句使用primaryId,而ORDER子句使用来查询结果imgDate。 我的问题是,现在使用多索引会更好吗?还是我应该使用多列索引(目前我不太了解)? 这是我从EXPLAIN得到的: 注意:这不是使用多列索引,这是使用上表说明的结果。 问题答

  • 本文向大家介绍MySQL索引使用说明(单列索引和多列索引),包括了MySQL索引使用说明(单列索引和多列索引)的使用技巧和注意事项,需要的朋友参考一下 1. 单列索引 在性能优化过程中,选择在哪些列上创建索引是最重要的步骤之一。可以考虑使用索引的主要有两种类型的列:在Where子句中出现的列,在join子句中出现的列。请看下面这个查询: 这个查询与前面的查询略有不同,但仍属于简单查询。由于age是

  • 问题内容: 我在同一台Ubuntu服务器上有一个Rails 3应用程序的暂存和生产实例(使用tyre gem)。看来这两个实例都共享相同的elasticsearch索引,这显然不是我想要的。 如何使生产和登台实例使用单独的实例? 问题答案: 您需要覆盖索引名称。假设您要绑定ActiveRecord,它将根据相关模型创建索引名称。您可以使用这样的前缀来调整名称; 然后会创建一个名为的索引,以此类推。

  • 问题内容: 我正在寻找一种使用findAll来获取两个标签的方式,按照它们在页面上出现的顺序。 目前我有: 如果我在仅带有’em’或’strong’的页面上使用该标签,则它将获得所有这些标签,如果我在同时使用这两个标签的页面上将获得’strong’标签。 有没有办法做到这一点?我主要关心的是保留标签的查找顺序。 问题答案: 您可以传递一个list,以找到任何给定的标签:

  • 问题内容: 经过搜索,没有找到这个特定的菜鸟问题的答案。如果我错过了,我深表歉意。 在MySQL数据库中,我有一个带有以下主键的表 主键ID(发票,项目) 在我的应用程序中,我也会经常自己选择“项目”,而很少选择“发票”。我假设我将从这些列的索引中受益。 当我定义以下内容时,MySQL不会抱怨: 索引(发票),索引(项目),主键ID(发票,项目) 但是,我没有看到任何证据(使用DESCRIBE-我

  • 在我的项目中,我包含了openapi依赖项,并让Quarkus生成openapi定义。是否可以将版本0的endpoint分组为一个定义,其余的endpoint分组为另一个定义? 我有一个设置,可以浏览到example.com/v0/docs/或example.com/v1/docs/。在不同版本中启动两个API实例很容易,但我认为不改变端口是不可能的。我希望所有endpoint都可以在同一个端口上