每日一题12:Pandas:数据重塑-融合

一、每日一题

解答:

import pandas as pd

def meltTable(report: pd.DataFrame) -> pd.DataFrame:
    reshaped_report = report.melt(id_vars='product', var_name='quarter', value_name='sales')
    return reshaped_report

 题源:Leetcode

二、总结

melt()函数是Pandas库中的一个非常实用的功能,用于将宽格式(wide format)的数据转换为长格式(long format),也被称为“unpivot”操作。这对于数据分析中需要按行组织特定变量的数据尤其有用,比如在时间序列分析、数据可视化或准备数据进行统计建模时。

基本语法
pd.melt(frame, id_vars=None, value_vars=None, var_name=None,
 value_name='value', col_level=None, ignore_index=True)
参数说明:
  • frame:这是你想要重塑的DataFrame。

  • id_vars:这是一个列表,包含你希望保持不变(作为标识列)的列名。这些列不会被重铸过程影响,每一行都会对应这些列的一个唯一值。

  • value_vars:这也是一个列表,包含了你想要融化的列名,即你想把它们从列名变成实际数据值的列。默认为DataFrame中除id_vars外的所有列。如果你只想融化特定的几列,就指定它们。

  • var_name:新DataFrame中用于存储原列名(被融化的列)的列名,默认为'variable'。

  • value_name:新DataFrame中用于存储被融化的列的值的列名,默认为'value'。

  • col_level:如果DataFrame的列有MultiIndex,这个参数指定了哪一层应该被当作id_vars或value_vars处理。

  • ignore_index:布尔值,默认为True,表示重置新DataFrame的索引。如果设置为False,则保留原始DataFrame的索引。

实例:

例一:

df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},
                   'B': {0: 1, 1: 3, 2: 5},
                   'C': {0: 2, 1: 4, 2: 6}})
>>> df
   A  B  C
0  a  1  2
1  b  3  4
2  c  5  6
df.melt(id_vars=['A'], value_vars=['B'],
        var_name='myVarname', value_name='myValname')
   A myVarname  myValname
0  a         B          1
1  b         B          3
2  c         B          5

 例二:

import pandas as pd

data = {
    'product': ['Widget A', 'Widget B'],
    'Q1': [100, 150],
    'Q2': [120, 160],
    'Q3': [80, 170],
    'Q4': [90, 180]
}
df = pd.DataFrame(data)

# 使用melt转换为长格式
long_df = pd.melt(df, id_vars=['product'], value_vars=['Q1', 'Q2', 'Q3', 'Q4'], 
                  var_name='Quarter', value_name='Sales')

# 执行结果为:
    product Quarter  Sales
0  Widget A      Q1    100
1  Widget B      Q1    150
2  Widget A      Q2    120
3  Widget B      Q2    160
4  Widget A      Q3     80
5  Widget B      Q3    170
6  Widget A      Q4     90
7  Widget B      Q4    180

官方文档 

2024.5.15

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值