Pandas DataFrame如何实现行转列 将currency字段转为独立列
实现方法
用Pandas内置的pivot_table即可快速完成长表转宽表,缺失值直接通过参数指定填充为0,不需要额外处理。
完整代码示例
import pandas as pd # 替换为你从数据源读取得到的原始DataFrame即可 df = pd.DataFrame({ "date": ["d1", "d2", "d2", "d3", "d3", "d3"], "currency": ["INR", "INR", "USD", "USD", "INR", "JPY"], "price": [31, 32, 21, 41, 51, 61] }) # 执行行转列 wide_df = ( df.pivot_table( index="date", columns="currency", values="price", fill_value=0, aggfunc="first" # 如果确定同一日期同一货币只有一条价格,用first执行更快;如果有多条需要求和就换成sum ) .reset_index() # 手动指定列顺序,和要求的INR/JPY/USD顺序对齐 [["date", "INR", "JPY", "USD"]] )
参数说明
index="date":指定date作为宽表的行维度columns="currency":把currency列的唯一枚举值展开为宽表的单独列values="price":取price列的数值作为宽表对应单元格的内容fill_value=0:没有匹配到对应价格的单元格直接填充0,符合需求aggfunc:聚合规则,如果同一日期+货币组合存在多条记录,会按该规则聚合,单条记录时任意聚合规则都不影响结果
注意:你给出的目标宽表示例里d3日期的USD价格写为42,和原始数据的41不一致,属于示例笔误,代码输出会以原始数据为准。
内容的提问来源于stack exchange,提问作者Elric
相关产品推荐
相关产品推荐

