在Pandas DataFrame中使用set_index

Tra*_*VOX 9 python pandas

使用导入的CSV文件,我像这样索引DataFrame ...

 rdata.set_index(['race_date', 'track_code', 'race_number', 'horse_name'])
Run Code Online (Sandbox Code Playgroud)

这就是DataFrame的一部分看起来像......

 race_date  track_code race_number horse_name          work_date  work_track
 2007-08-24 BM         8           Count Me Twice     2007-05-31         PLN
                                   Count Me Twice     2007-06-09         PLN
                                   Count Me Twice     2007-06-16         PLN
                                   Count Me Twice     2007-06-23         PLN
                                   Count Me Twice     2007-08-05         PLN
                                   Judge's Choice     2007-06-07          BM
                                   Judge's Choice     2007-06-14          BM
                                   Judge's Choice     2007-07-08          BM
                                   Judge's Choice     2007-08-18          BM
Run Code Online (Sandbox Code Playgroud)

为什么'horse_name'列不像日期,曲目和种族一样被分组?也许它是设计的,因此如何通过竞赛来切割这个更大的DataFrame,以获得一个以'horse_name'作为索引的新DataFrame?

Vik*_*kez 10

这不是一个错误.这正是它的工作方式.

DataFrame必须显示其数据中的每个项目.因此,如果索引具有一个级别,则该级别将完全展开.如果它有两个级别,第一级将被分组,第二级将完全展开,如果它具有树级别,前两个将被分组,第三个将被扩展,依此类推.

所以这就是马名没有分组的原因.如果你也按马名分组,你怎么能看到DataFrame中的所有项目:)

尝试做:

 rdata.set_index(['race_date', 'track_code', 'race_number'])
Run Code Online (Sandbox Code Playgroud)

要么:

 rdata.set_index(['race_date', 'track_code'])
Run Code Online (Sandbox Code Playgroud)

您将看到索引的最后一级始终完全展开,以便您可以查看DataFrame中的所有项目.