koude0是用于处理多级索引的强大工具 ,使我们提高了操纵,准备和分析复杂数据集的灵活性
from pandas import MultiIndex
让我们研究如何利用MultiIndex
到完全缺少的组合使用令人难以置信的优雅解决方案!
目录
- Understanding missing combinations of categories
- Creating a MultiIndex with all possible combinations of categories
- Reindexing our DataFrame to align with the MultiIndex
- Conclusion
- Additional resources
了解类别的缺失组合
在数据准备方面,我们遇到的常见场景是分类数据,它跨越了我们数据集的多个级别。在使用此数据时,重要的是要了解和确定我们的类别可能包含缺失组合
一个很好的例子可以是销售数据,它涵盖了几个地理区域和 product 类别。
缺失的组合可能表明:
- 特定产品未在某个地区出售
- 或该区域产品组合的数据本身是缺少!
让我们进一步迈出一步,看看spam
,Texas
和California
的spam
和eggs
销售的简单数据集 - 您能告诉哪些区域和产品的组合缺失销售数据?
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
,并获得访问优雅的工具包,以操纵,准备和分析我们的数据的不同级别
创建一个具有所有可能组合的多组合
让我们从现在早些时候将我们的spam
和eggs
原始销售数据存储在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 值的MultiIndex
在region
和product
中,我们可以通过作为参数传递:
pd.MultiIndex.from_product
方法:
- a 列表的列表包含每个 unique
region
and 在我们的数据集中 uniqueproduct
- 和字符串列表包含我们列的
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
继续前进,并为我们创建了region
和product
的所有可能组合
感谢MultiIndex,您是最好的!
重新索引我们的数据框以与MultiIndexex 保持一致
和大结局!我们将reindex
我们的DataFrame
与我们的MultiIndex
一致完成缺失的组合和在此过程中用零>填充它们!
为此,我们将:
-
set our koude14's index在列
region
和product
上使用我们的names
列表 -
reindex我们的
DataFrame
使用我们的multiindex
并用零>填充丢失值 - 和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 任意分类量(包括时间序列,即,即日期,几周,几个月!)
所以走出去完成那些缺少的组合,我相信你!
如果您想更进一步,并且练习使用示例代码和数据,我将完整的工作示例供您在GitHub上进行探索!
非常感谢您的阅读,如果您喜欢我的内容,请务必在社交媒体或我的personal websiteð上查看我的其他一些作品或 Connect
欢呼!