python - 以复杂的方式更改 DataFrame
问题描述
我有一个数据框如下:
id|s1|s2|s3|s4|s5
0|a|b|NaN|NaN|NaN
0|NaN|NaN|NaN|c|NaN
0|a1|NaN|NaN|c2|NaN
1|b|c|NaN|NaN|NaN
1|NaN|NaN|a1|NaN|NaN
1|a1|b|NaN|c1|NaN
.
.
.
.
1000(rows)...............
我希望这样重组:
id|s1|s2|s3|s4|s5
0|a|b|NaN|c|NaN
0|a1|b|NaN|c2|NaN
1|b|c|a1|c1|NaN
1|a1|b|a1|c1|NaN
我努力了:
df.unstack(),df.melt() and df.pivot()
他们都没有给我预期的结果。基本上我想尽可能地减少 NaN。任何人都可以建议我一个方法吗?我希望每个单元格只有一个条目,而不是单个单元格中的一组条目。我不想要 NaN 值,但我想要第一个输出中提到的流。仅当同一 id 中的任何行中都不存在值时,我才想要 NaN
解决方案
对每一行进行分组,id
然后:ffill+bfill
drop_duplicates
df.groupby('id').apply(lambda x: x.ffill().bfill()).drop_duplicates()
id s1 s2 s3 s4 s5
0 0 a b NaN c NaN
2 0 a1 b NaN c2 NaN
3 1 b c a1 c1 NaN
5 1 a1 b a1 c1 NaN
推荐阅读
- amazon-web-services - 为 Lambda 代理集成启用 CORS 支持的问题
- api - 使用 axios 显示来自 Twitter API 的数据
- angular - “MatPaginator”类型上不存在属性“previousPageIndex”
- python - 即使卸载并再次安装,也没有名为 bson 的模块
- go - 无法访问/投射时间。时间
- python - 使用 pymongo 与使用 pandas 进行聚合/分组
- java - 是否可以在搜索之前修复 JTable 相同的问题?
- javascript - node.js 使用 SQS 需要功能示例
- sql - 使用多个选择语句插入私有临时表
- python - 使用模数对数据进行分块的优雅方法?