在数据分析和处理中,将dataframe从“长格式”转换为“宽格式”是一种常见的需求,即所谓的“数据透视”或“重塑”。pandas提供了多种强大的工具来实现这一目标,其中pivot()函数是常用的一个。然而,在某些特定场景下,pivot()函数可能无法直接生成我们期望的单行聚合结果,例如当原始数据结构导致其在转置时产生多行并伴随nan值。
让我们从一个具体的例子开始。假设我们有一个DataFrame df2,其中包含产品名称和对应的最大功率:
import pandas as pd df2 = pd.DataFrame({ 'nombreNumeroUnico': ['UP2_G1_B', 'UP2_G2_B'], 'pMax': [110.0, 110.0] }) print("原始DataFrame:") print(df2)
输出:
原始DataFrame: nombreNumeroUnico pMax 0 UP2_G1_B 110.0 1 UP2_G2_B 110.0
我们的目标是将其转换为以下形式:
UP2_G1_B UP2_G2_B 0 110.0 110.0
即将nombreNumeroUnico列的值作为新的列标题,pMax列的值作为对应的新列的数据,并且所有数据都聚合到一行中。
如果直接使用pivot()函数,并尝试将nombreNumeroUnico作为列,pMax作为值,会遇到以下情况:
# 尝试使用 pivot() 函数 pivot_result = df2.pivot(index=None, columns="nombreNumeroUnico", values="pMax") print("\n使用 pivot() 函数的结果:") print(pivot_result)
输出:
使用 pivot() 函数的结果: nombreNumeroUnico UP2_G1_B UP2_G2_B 0 110.0 NaN 1 NaN 110.0
可以看到,pivot()函数为每个原始行创建了一个新行,并在其他位置填充了NaN。这是因为pivot函数旨在根据指定的index、columns和values参数重新排列数据,如果index没有明确指定(或指定为None),它会保留原始的行索引,并尝试将每个唯一组合的数据放置到相应的位置,导致在我们的单值场景下出现NaN。
为了实现精确的单行透视,我们可以结合使用set_index()、T(转置)和reset_index()这三个Pandas方法。这种组合的原理是:
下面是实现这一过程的代码:
import pandas as pd df2 = pd.DataFrame({ 'nombreNumeroUnico': ['UP2_G1_B', 'UP2_G2_B'], 'pMax': [110.0, 110.0] }) # 1. 将 'nombreNumeroUnico' 设置为索引 df_indexed = df2.set_index('nombreNumeroUnico') print("\n步骤1: set_index 后的 DataFrame:") print(df_indexed) # 2. 对 DataFrame 进行转置 df_transposed = df_indexed.T print("\n步骤2: 转置后的 DataFrame:") print(df_transposed) # 3. 重置索引并删除旧索引列 result_df = df_transposed.reset_index(drop=True) # 可选优化:清除 columns.name 属性,使输出更简洁 result_df.columns.name = None print("\n最终结果 DataFrame:") print(result_df)
输出:
步骤1: set_index 后的 DataFrame: pMax nombreNumeroUnico UP2_G1_B 110.0 UP2_G2_B 110.0 步骤2: 转置后的 DataFrame: nombreNumeroUnico UP2_G1_B UP2_G2_B pMax 110.0 110.0 最终结果 DataFrame: UP2_G1_B UP2_G2_B 0 110.0 110.0
通过这三个步骤的组合,我们成功地将nombreNumeroUnico列的值转换为新的列标题,并将pMax的值作为对应的数据,最终得到了一个精确的单行DataFrame,完全符合预期。
掌握set_index().T.reset_index()这一组合技巧,将极大地扩展你在Pandas中进行数据重塑的能力,尤其是在处理需要将特定列值转换为列标题并聚合为单行数据的场景中。
以上就是Pandas DataFrame 高效重塑:实现单行透视的精确方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 //m.sbmmt.com/ All Rights Reserved | php.cn | 湘ICP备2023035733号