使用pandas.multiindex在我们的数据中完成类别的缺失组合!
#教程 #python #datascience #pandas

koude0是用于处理多级索引的强大工具 ,使我们提高了操纵,准备和分析复杂数据集的灵活性

from pandas import MultiIndex

让我们研究如何利用MultiIndex完全缺少的组合使用令人难以置信的优雅解决方案!

目录

Chris Greening - Software Developer

嘿!我叫克里斯·格林宁(Chris Greening),我是来自纽约都会区的软件开发人员,具有各种各样的工程经验 - 请给我留言,让我们构建一些很棒的东西!

favicon Christophergreening.com

了解类别的缺失组合

在数据准备方面,我们遇到的常见场景是分类数据,它跨越了我们数据集的多个级别。在使用此数据时,重要的是要了解和确定我们的类别可能包含缺失组合

一个很好的例子可以是销售数据,它涵盖了几个地理区域 product 类别。

缺失的组合可能表明:

  • 特定产品未在某个地区出售
  • 或该区域产品组合的数据本身是缺少

让我们进一步迈出一步,看看spamTexasCaliforniaspameggs销售的简单数据集 - 您能告诉哪些区域和产品的组合缺失销售数据?

       region product  sales
0    New York    spam      9
1    New York    eggs      2
2       Texas    eggs      5  <- ?
3  California    spam      7  <- ?

在这种情况下,Texas缺少spam销售的一行,而California缺少eggs的一行!

一些重要问题要考虑:

  • 销售量为零,所以这些行被委托了吗?
  • 分别在德克萨斯州或加利福尼亚州不提供这些产品?
  • 这些缺失的组合将如何影响我们的分析?

并且不仅要排除这些组合,因此必须完成丢失的类别并用零(或NA)填充相关值,以使我们更完整地了解数据集

       region product  sales
0    New York    spam      9
1    New York    eggs      2
2       Texas    spam      0  <- :D
3       Texas    eggs      5
4  California    spam      7
5  California    eggs      0  <- :D

什么是多索引?

如引言中所述,MultiIndex是管理DataFrame的强大工具,该工具包含嵌套层,类别和/或分段

在上一节的销售数据示例中,我们有多个索引,可以通过以下方式对销售数据进行分类:

  • region
  • product

通过利用MultiIndex,我们能够将此层次结构编码为DataFrame,并获得访问优雅的工具包,以操纵,准备和分析我们的数据的不同级别

>

创建一个具有所有可能组合的多组合

让我们从现在早些时候将我们的spameggs原始销售数据存储在DataFrame中(,我们称之为 sales_df

import pandas as pd

sales_df = pd.DataFrame({
    "region": ["New York", "New York", "Texas", "California"],
    "product": ["spam", "eggs", "eggs", "spam"],
    "sales": [9, 2, 5, 7]
})

要创建一个包含 unique 值的MultiIndexregionproduct中,我们可以通过作为参数传递:

来利用pd.MultiIndex.from_product方法:

  1. a 列表的列表包含每个 unique region and 在我们的数据集中 unique product
  2. 字符串列表包含我们列的names
unique_categories = [
    sales_df['region'].unique(), 
    sales_df['product'].unique()
]
names = ["region", "product"]
multiindex = pd.MultiIndex.from_product(
    unique_categories,
    names=names
)

>>> print(multiindex)
MultiIndex([(  'New York', 'spam'),
            (  'New York', 'eggs'),
            (     'Texas', 'spam'),  <- wow!
            (     'Texas', 'eggs'),
            ('California', 'spam'),
            ('California', 'eggs')], <- great!
           names=['region', 'product'])

检查一下!通过将我们独特类别的交叉产品MultiIndex继续前进,并为我们创建了regionproduct的所有可能组合

感谢MultiIndex,您是最好的!


重新索引我们的数据框以与MultiIndexex 保持一致

和大结局!我们将reindex我们的DataFrame与我们的MultiIndex 一致完成缺失的组合在此过程中用零>填充它们!

为此,我们将:

  1. set our koude14's index在列regionproduct上使用我们的names列表
  2. reindex我们的DataFrame使用我们的multiindex并用零>填充丢失值
  3. reset the index删除编码的层次结构
sales_df = (
    sales_df
    .set_index(names)
    .reindex(multiindex, fill_value = 0)
    .reset_index()
)

>>> print(sales_df)
       region product  sales
0    New York    spam      9
1    New York    eggs      2
2       Texas    spam      0  <- yay!
3       Texas    eggs      5
4  California    spam      7
5  California    eggs      0  <- fantastic!

结论

这样,我们已经了解了如何使用pandas.MultiIndex用令人难以置信的优雅解决方案来完成缺失的组合

虽然我们的产品区域示例是微不足道的,但这将 scale 任意分类量(包括时间序列,即,即日期,几周,几个月!)

所以走出去完成那些缺少的组合,我相信你!

GIF showing spam and eggs sales in New York, Texas, and California with missing combinations of categories getting completed and filled with zero

如果您想更进一步,并且练习使用示例代码和数据,我将完整的工作示例供您在GitHub上进行探索!

非常感谢您的阅读,如果您喜欢我的内容,请务必在社交媒体或我的personal websiteð上查看我的其他一些作品或 Connect

Chris Greening - Software Developer

嘿!我叫克里斯·格林宁(Chris Greening),我是来自纽约都会区的软件开发人员,具有各种各样的工程经验 - 请给我留言,让我们构建一些很棒的东西!

favicon Christophergreening.com

欢呼!



其他资源