首页 > 解决方案 > 组合两个数据帧,使一个数据帧中的值成为另一个数据帧的标头

问题描述

我的第一个数据框 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 中新列的标题。新列中填充了cashd2 中的值。

    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()吗?这个例子似乎微不足道,很可能我在谷歌搜索答案时无法很好地描述它。

标签: pythonpandasdataframe

解决方案


尝试旋转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

推荐阅读