python pandas数据融合
0 背景
之前我们提到了pandas的数据透视: python pandas数据透视 . 数据透视操作通过 pivot
和 pivot_table
方法可以将数据从长格式转换为宽格式, 以便用于特定场景下的数据分析. 数据融合df.melt()
是df.pivot()
的逆操作函数, 用于将DataFrame从宽格式转换为长格式或堆叠格式。这个过程通常被称为“数据融合”或“融化”,因为它将多个列“融化”成两列,一列包含变量名,另一列包含值。
数据融合的主要用途包括:
-
数据重构:将DataFrame的结构从宽格式转换为长格式,这在处理数据时特别有用,当我们想要将数据集整理成一种更易于分析和可视化的形式时是非常有用的。 -
简化数据分析:许多数据分析和可视化工具更适合处理长格式数据,因为它们可以更容易地对数据进行分组、比较和绘图。 -
准备数据以进行建模:在机器学习或统计建模中,经常需要将数据转换为长格式,以便更灵活地定义模型规范,尤其是在处理类别数据和时间序列数据时。
1 使用
参数说明
melt()
def melt(
self,
id_vars=None,
value_vars=None,
var_name=None,
value_name: Hashable = "value",
col_level: Level | None = None,
ignore_index: bool = True,
) -> DataFrame:
-
id_vars
:在数据融合过程中保持不变的列, 有tuple、list或ndarray(可选),要取消透视的列。这些列的数据会被复制到输出DataFrame的相应行中。 -
value_vars
:需要被融合的列。如果未指定,所有不在id_vars
中的列都会被融合。 -
var_name
:融合后变量名列的名称。默认为”variable”。 -
value_name
:融合后值列的名称。默认为”value”。 -
col_level
:int或str(可选),如果列是多层索引,则使用此级别来融合。
初始化数据
import pandas as pd
import numpy as np
data = {
"year": [2023, 2023, 2024, 2024],
"region": ["East", "West", "East", "West"],
"a_sales": [100, 150, 110, 130],
"b_sales": [90, 120, 95, 115]
}
df = pd.DataFrame(data)
df
year | region | a_sales | b_sales | |
---|---|---|---|---|
0 | 2023 | East | 100 | 90 |
1 | 2023 | West | 150 | 120 |
2 | 2024 | East | 110 | 95 |
3 | 2024 | West | 130 | 115 |
数据融合
没有任何参数, 它会将所有的列[year, region, a_sales, b_sales]作为标识和值展开,一列为标签,默认列名variable
,另一列为值,默认列名为value
。
df.melt()
variable | value | |
---|---|---|
0 | year | 2023 |
1 | year | 2023 |
2 | year | 2024 |
3 | year | 2024 |
… | … | … |
9 | a_sales | 150 |
10 | a_sales | 110 |
11 | a_sales | 130 |
12 | b_sales | 90 |
13 | b_sales | 120 |
14 | b_sales | 95 |
15 | b_sales | 115 |
指定标识和值
df.melt(id_vars=['year','region'])
df.melt(id_vars=['year','region'], value_vars=['a_sales', 'b_sales'])
year | region | variable | value | |
---|---|---|---|---|
0 | 2023 | East | a_sales | 100 |
1 | 2023 | West | a_sales | 150 |
2 | 2024 | East | a_sales | 110 |
3 | 2024 | West | a_sales | 130 |
4 | 2023 | East | b_sales | 90 |
5 | 2023 | West | b_sales | 120 |
6 | 2024 | East | b_sales | 95 |
7 | 2024 | West | b_sales | 115 |
df.melt(id_vars=['year','region'], value_vars='a_sales', )
df.melt(id_vars=['year', 'region'], value_vars=['a_sales', ], )
year | region | variable | value | |
---|---|---|---|---|
0 | 2023 | East | a_sales | 100 |
1 | 2023 | West | a_sales | 150 |
2 | 2024 | East | a_sales | 110 |
3 | 2024 | West | a_sales | 130 |
指定标识和值的列名.
df.melt(id_vars=['year', 'region'], value_vars=['a_sales', ], var_name='A产品销售', value_name='销售额')
year | region | A产品销售 | 销售额 | |
---|---|---|---|---|
0 | 2023 | East | a_sales | 100 |
1 | 2023 | West | a_sales | 150 |
2 | 2024 | East | a_sales | 110 |
3 | 2024 | West | a_sales | 130 |
2 其他
数据融合让数据无限度地铺开,它是数据透视的反向操作, 以便我们能够在一些场景下可以更好的观察数据, 以适应我们的特定数据分析需求。
如果你觉得这期内容不错的话, 欢迎点赞, 在看, 关注我的微信公众号
原文始发于微信公众号(其之):python pandas数据融合
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/204724.html