Python新手求助:将DataFrame特定单元格值复制到对应列
解决DataFrame按Process分组复制对应type值到列的问题
示例输入
| Process | type | value | PVR | Hono | Civel |
|---|---|---|---|---|---|
| 123456 | PVR | $5 | $0 | $0 | $0 |
| 123456 | Civel | $17 | $0 | $0 | $0 |
| 123456 | Hono | $2 | $0 | $0 | $0 |
| 145 | Civel | $457 | $0 | $0 | $0 |
| 8547 | Civel | $47 | $0 | $0 | $0 |
| 8547 | PVR | $88 | $0 | $0 | $0 |
| 3333 | PVR | $74 | $0 | $0 | $0 |
期望输出
| Process | type | value | PVR | Hono | Civel |
|---|---|---|---|---|---|
| 123456 | PVR | $5 | $5 | $17 | $2 |
| 123456 | Civel | $17 | $5 | $17 | $2 |
| 123456 | Hono | $2 | $5 | $17 | $2 |
| 145 | Civel | $457 | $0 | $0 | $457 |
| 8547 | Civel | $47 | $88 | $0 | $47 |
| 8547 | PVR | $88 | $88 | $0 | $47 |
| 3333 | PVR | $74 | $74 | $0 | $0 |
解决方案(Python pandas)
用pandas可以快速实现这个需求,步骤如下:
- 导入pandas库,构造或读取你的DataFrame
import pandas as pd # 从文件读取数据的话,替换成下面的代码(示例为csv格式): # df = pd.read_csv('你的数据文件路径.csv') # 构造和示例一致的输入数据 data = { 'Process': [123456, 123456, 123456, 145, 8547, 8547, 3333], 'type': ['PVR', 'Civel', 'Hono', 'Civel', 'Civel', 'PVR', 'PVR'], 'value': ['$5', '$17', '$2', '$457', '$47', '$88', '$74'], 'PVR': ['$0']*7, 'Hono': ['$0']*7, 'Civel': ['$0']*7 } df = pd.DataFrame(data)
- 按Process分组,提取每组内type和value的对应关系
# 每个Process会生成一个字典,比如123456对应的字典是{'PVR':'$5', 'Civel':'$17', 'Hono':'$2'} grouped_map = df.groupby('Process').apply( lambda x: x.set_index('type')['value'].to_dict() ).reset_index(name='type_value_map')
- 合并映射并填充目标列
# 把分组后的映射合并回原DataFrame df = df.merge(grouped_map, on='Process') # 遍历PVR、Hono、Civel列,从映射字典中取值,无对应值则保留$0 for col in ['PVR', 'Hono', 'Civel']: df[col] = df['type_value_map'].apply(lambda x: x.get(col, '$0')) # 删除临时的映射列 df = df.drop('type_value_map', axis=1)
- 查看结果
运行代码后,df就是你需要的期望输出,直接打印或保存即可:
print(df)
关键逻辑说明
- 分组生成的字典是核心:它把同一个Process下不同type对应的value统一存储,方便批量填充
dict.get(col, '$0')的作用:如果字典里有当前列对应的value就取出,没有则用$0代替,完全匹配你的需求
内容的提问来源于stack exchange,提问作者Raug
相关产品推荐
相关产品推荐

