python - pandas DataFrame 中的级别是什么?

标签 python pandas dataframe multi-index

我一直在阅读文档,许多解释和示例都将 levels 视为理所当然。恕我直言,文档缺乏对数据结构和定义的基本解释。

数据框中的级别是什么? MultiIndex 索引中的级别是什么?

最佳答案

我在分析 my own question 的答案时偶然发现了这个问题,但我觉得约翰的回答不够令人满意。经过几次实验后,我认为我理解了这些级别并决定分享:

简答:

级别是索引或列的一部分。

长答案:

我认为这个多列 DataFrame.groupby 示例很好地说明了索引级别。

假设我们有时间记录问题报告数据:

report = pd.DataFrame([
        [1, 10, 'John'],
        [1, 20, 'John'],
        [1, 30, 'Tom'],
        [1, 10, 'Bob'],
        [2, 25, 'John'],
        [2, 15, 'Bob']], columns = ['IssueKey','TimeSpent','User'])

   IssueKey  TimeSpent  User
0         1         10  John
1         1         20  John
2         1         30   Tom
3         1         10   Bob
4         2         25  John
5         2         15   Bob

这里的索引只有1级(每一行只有一个索引值)。该索引是人工的(流水号),由 0 到 5 的值组成。

假设我们要将同一用户创建的所有日志合并(求和)到同一问题(以获得用户在该问题上花费的总时间)

time_logged_by_user = report.groupby(['IssueKey', 'User']).TimeSpent.sum()

IssueKey  User
1         Bob     10
          John    30
          Tom     30
2         Bob     15
          John    25

现在我们的数据索引有 2 个级别,因为多个用户记录了同一问题的时间。级别是 IssueKeyUser。级别是索引的一部分(只有它们一起才能识别 DataFrame/Series 中的一行)。

在 Spyder 变量浏览器中可以很好地观察到作为索引一部分的级别(作为元组):

enter image description here

具有级别使我们有机会根据我们选择的索引部分(级别)汇总组内的值。例如。如果我们想分配任何用户在某个问题上花费的最长时间,我们可以:

max_time_logged_to_an_issue = time_logged_by_user.groupby(level='IssueKey').transform('max')

IssueKey  User
1         Bob     30
          John    30
          Tom     30
2         Bob     25
          John    25

现在前 3 行的值为 30,因为它们对应于问题 1(User 级别在上面的代码中被忽略). 2 问题也是如此。

这可能很有用,例如如果我们想找出哪些用户在每个问题上花费的时间最多:

issue_owners = time_logged_by_user[time_logged_by_user == max_time_logged_to_an_issue]

IssueKey  User
1         John    30
          Tom     30
2         John    25

关于python - pandas DataFrame 中的级别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45235992/

相关文章:

python - 何时使用 pandas 系列、numpy ndarrays 或简单的 python 字典?

python - 在 Pandas 中删除包含某些字符串列表的行

r - 使用 R、支持向量机预测简单序列

python - AWS Athena PyAthena AccessDeniedException

python - mercurial:在每次提交时自动运行远程回归测试

python - 如何从数据框中提取特定值的索引和列?

r - 将多个数据框拆分、应用和合并为一个数据框

python - 反转数据框单个列中值的顺序

python - 从文件中删除未混合的数字

Python 数据类型 ('O')。处理对象数据类型。转换为字符串/整数