python - 如何根据python 2.7中的条件转置特定列
问题描述
我在文件中有以下数据格式:
ID,var_name,var_value
1,ABC,This is abc1
1,DEF,This is def1
2,ABC,This is abc2
2,DEF,This is def2
2,GHI,This is ghi2
3,ABC,This is abc3
4,ABC,This is abc4
4,DEF,This is def4
我也有一个标题列表=['ABC','GHI']
在上述数据集中,每个“ID”不一定包含所有变量,但ID:2
包含最大数量的变量(ABC、DEF、GHI)。我需要将上述数据集转换为以下嵌套列表格式:
[['ID','ABC','GHI'], [1,'This is abc1', ''],[2, 'This is abc2','This is ghi2'],[3,'This is abc3',''],[4,'This is abc4','']]
这意味着该列表应该:
- 填充所有 ID 的数据
- 为上述数据集中不存在的变量创建空字符串。
- 填充嵌套列表,保持与 Header 列表相同的顺序
- 只填充那些标题值,即标题列表只有值'ABC','GHI',因此嵌套列表应该只填充值'ABC'和'GHI',并且应该忽略上述数据集中的'DEF'行。
我想在 Python 2.7 中执行此操作,可能使用 Pandas。
解决方案
我认为您应该尝试留在这个美丽的熊猫数据框中
df2=(df.pivot(index='ID', columns='var_name', values='var_value')
.fillna('').drop('DEF', axis=1).reset_index())
#output:
var_name ID ABC GHI
0 1 This is abc1
1 2 This is abc2 This is ghi2
2 3 This is abc3
3 4 This is abc4
但您也可以进一步实现列表:
print([df2.columns.tolist()] + df2.values.tolist())
[['ID', 'ABC', 'GHI'],
[1, 'This is abc1', ''],
[2, 'This is abc2', 'This is ghi2'],
[3, 'This is abc3', ''],
[4, 'This is abc4', '']]
推荐阅读
- javascript - 使用扩展汉堡级别的按钮创建多级汉堡菜单
- python - scipy's 8 中的 SIGSEV 故障
- javascript - 如何在光滑滑块中扩展悬停幻灯片的宽度并为第一项设置间距?
- python - 打开文件时如何使用 if / else 条件。Python
- sql - 截断 SQL 日期时间至今
- path - 使用 Final Builder 编译 Delphi 项目
- javascript - 如何根据用户指定的时间填充100%的进度条
- javascript - 在 nodejs 中通过 http.request 使用 fs.createWriteStream 的最佳实践是什么
- r - 在 gganimate 中标记日期
- html - 什么是
html中的标签以及如何有效使用?