python - 组合两个数据帧,使一个数据帧中的值成为另一个数据帧的标头
问题描述
我的第一个数据框 d1 是这样的。
num value
0 1 229
1 2 203
2 3 244
第二个,d2:
num person cash
0 1 person1 29
1 1 person2 81
2 2 person1 17
3 2 person2 75
4 3 person1 62
5 3 person3 55
我想将它们组合在一起num
,使输入person
成为 d1 中新列的标题。新列中填充了cash
d2 中的值。
num value person1 person2 person 3
0 1 229 29 81 0
1 2 203 17 75 0
2 3 244 62 0 55
merge()
它是和之间的某种组合unstack()
吗?这个例子似乎微不足道,很可能我在谷歌搜索答案时无法很好地描述它。
解决方案
尝试旋转df2
和合并:
df1.merge(df2.pivot('num','person','cash'),
on='num')
输出:
num value person1 person2
0 1 229 29 81
1 2 203 17 75
2 3 244 62 55
编辑:对于更新的数据,同样的想法,但使用set_index().unstack()
而不是pivot
. 这有助于更轻松地填充缺失值0
。
df1.merge(df2.set_index(['num','person'])['cash']
.unstack(fill_value=0),
on='num')
输出:
num value person1 person2 person3
0 1 229 29 81 0
1 2 203 17 75 0
2 3 244 62 0 55
推荐阅读
- angular - 如果响应为空,我如何调用函数
- javascript - 尝试使用递归解决而不使用其他算法
- python - 如何在从 .csv 文件创建的列表中查找单词的频率
- python - 我无法弄清楚这个主要检查器有什么问题
- css - CSS边距编辑弄乱了移动网站
- php - 使用 PHP 上传图像并在单独的页面上显示
- angular5 - “HttpResponse”类型上不存在属性“blob”
' - php - 我如何以任何可能的方式在这里打印这个我只想在这里打印一个数字
- javascript - chai 和 sinon 测试不会失败,但应该
- ngxs - NGXS 选择器或选择器注释返回是按值传递还是引用传递?