如何用pivot将7×2 DataFrame转换为带前缀的1×14单行结构
解决DataFrame折叠为单行多列(带列名前缀)的问题
嘿,我来帮你搞定这个DataFrame的结构转换需求!其实不用纠结pivot(),用转置或者堆叠的方法更直接,完全能实现你要的「原列标签+行索引」作为新列名的效果。
先还原你的原始DataFrame
首先咱们先把你给出的表格转换成可运行的代码:
import pandas as pd # 构造原始统计DataFrame data = { 'polarity': [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 'subjectivity': [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] } df = pd.DataFrame(data, index=['count', 'mean', 'min', '25%', '50%', '75%', 'max'])
方法一:转置+重命名列(最直观)
这个方法步骤清晰,容易理解:
- 先转置DataFrame,把原来的行索引(count/mean这些)变成列的层级
- 把原列名和行索引拼接成新的列名
- 直接得到1行14列的结果
# 转置DataFrame,此时原列名变成行索引,原行索引变成列 transposed_df = df.T # 重命名列,格式为「原列名_行索引」 transposed_df.columns = [f"{col}_{idx}" for idx, col in transposed_df.columns] # 最终结果就是你要的结构 result = transposed_df
方法二:堆叠+重塑(更灵活)
如果需要处理更复杂的多级索引场景,这个方法更通用:
# 把列和行索引堆叠成多级索引的Series stacked_series = df.stack() # 将多级索引合并成单个列名 stacked_series.index = [f"{col}_{idx}" for idx, col in stacked_series.index] # 转成DataFrame并转置,得到单行结构 result = stacked_series.to_frame().T
最终效果
运行上述代码后,打印result会得到你期望的结构:
polarity_count polarity_mean polarity_min polarity_25% polarity_50% polarity_75% polarity_max subjectivity_count subjectivity_mean subjectivity_min subjectivity_25% subjectivity_50% subjectivity_75% subjectivity_max 0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0
为什么不用pivot()?
pivot()主要用于长表转宽表,需要指定index/columns/values三个参数来聚合数据,而你的需求只是把行索引和原列名拼接成新列名,转置或堆叠的方式更直接高效,不需要额外的聚合逻辑。
内容的提问来源于stack exchange,提问作者lucky_but_stupid
相关产品推荐
相关产品推荐

