首页 > 后端开发 > Python教程 > 如何旋转 Pandas DataFrame:重塑数据的综合指南?

如何旋转 Pandas DataFrame:重塑数据的综合指南?

DDD
发布: 2024-12-25 10:25:09
原创
157 人浏览过

How to Pivot a Pandas DataFrame: A Comprehensive Guide to Reshaping Data?

如何对 DataFrame 进行透视?

什么是透视?

  • 将 DataFrame 从 long 重塑为格式
  • 允许创建一个新的 DataFrame,其中基于一列或多列聚合值

如何进行透视?

  • 透视数据的几种方法DataFrame:

    • pd.DataFrame.pivot_table
    • pd.DataFrame.groupby pd.DataFrame.unstack
    • pd.DataFrame.set_index pd.DataFrame.unstack
    • pd.DataFrame.pivot(少灵活)
    • pd.crosstab(用于交叉制表)
    • pd.factorize np.bincount(高级,高性能)
    • pd.get_dummies pd.DataFrame.dot(交叉制表)

长格式转宽格式?

  • 长格式:

    • 每个观察占用一行
    • 多列代表不同属性/测量值
  • 宽格式:

    • 每个观察占据一列
    • 多行代表不同的属性/测量值

示例

问题 1:为什么我会收到 ValueError:索引包含重复条目,无法重塑?

  • 当尝试旋转具有重复键的 DataFrame 时会发生这种情况透视
  • 示例:如果 df 有重复的 row 和 col 条目,并且您使用 df.pivot(index='row', columns='col') 进行透视,您将收到错误。

问题 2:如何对 df 进行透视,使 col 值是列,行值是索引,val0 的平均值是值?

  • 使用 pd.DataFrame.pivot_table:

    df.pivot_table(values='val0', index='row', columns='col', aggfunc='mean')
    登录后复制
    登录后复制

问题 3:如何使缺失值为 0 ?

  • 使用 fill_value 参数pd.DataFrame.pivot_table:

    df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc='mean')
    登录后复制
    登录后复制

问题 4:我可以得到除平均值之外的其他内容,例如总和吗?

  • 使用不同的 aggfunc 参数pd.DataFrame.pivot_table:

    df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc='sum')
    登录后复制
    登录后复制

问题 5:我可以一次进行多个聚合吗?

  • 提供一个列表aggfunc 参数的可调用项pd.DataFrame.pivot_table:

    df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc=[np.size, np.mean])
    登录后复制

问题 6:我可以聚合多个值列吗?

  • 将多个列名称作为列出值pd.DataFrame.pivot_table:

    df.pivot_table(values=['val0', 'val1'], index='row', columns='col', fill_value=0, aggfunc='mean')
    登录后复制

问题 7:我可以按多列细分吗?

  • 将多个列名称作为列表传递索引或列pd.DataFrame.pivot_table:

    df.pivot_table(values='val0', index=['row', 'item'], columns='col', fill_value=0, aggfunc='mean')
    登录后复制

问题8:或者

  • 可以使用索引和列中的多列进行细分pd.DataFrame.pivot_table:

    df.pivot_table(values='val0', index=['key', 'row'], columns=['item', 'col'], fill_value=0, aggfunc='mean')
    登录后复制

问题 9:我可以聚合列和行一起出现的频率,也称为“交叉表”吗?

  • 使用 pd.crosstab:

    df.pivot_table(values='val0', index='row', columns='col', aggfunc='mean')
    登录后复制
    登录后复制

问题 10:如何通过仅旋转两列将 DataFrame 从长转换为宽?

df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc='mean')
登录后复制
登录后复制

问题 11:如何展平倍数数据透视后索引到单个索引?

  • 加入多部分索引作为单个字符串:

    df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc='sum')
    登录后复制
    登录后复制

以上是如何旋转 Pandas DataFrame:重塑数据的综合指南?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板