【问题标题】:Unpivot dataframe and join pandas [duplicate]Unpivot数据框并加入熊猫[重复]
【发布时间】:2019-01-02 17:48:42
【问题描述】:

我有这个数据框:

+-------+-----+---------+
| group | id  |  value  |
+-------+-----+---------+
| A     |  92 | 123.123 |
| A     | 105 |    9034 |
| A     | 999 |     421 |
| B     |  92 |   32019 |
| B     | 105 |    3281 |
+-------+-----+---------+

我想旋转“组”列,使其值成为“值”列名称的一部分,并且观察结果由“id”连接,如下所示:

+-----+---------+---------+
| id  | A_value | B_value |
+-----+---------+---------+
|  92 | 123.123 | 32019   |
| 105 |    9034 | 3281    |
| 999 |     421 | nan     |
+-----+---------+---------+

最好的方法是什么?

【问题讨论】:

    标签: python pandas dataframe join pivot


    【解决方案1】:

    使用set_indexunstack 并展平多索引:

    df_out = df.set_index(['id','group']).unstack()
    df_out.columns = df_out.columns.map('{0[1]}_{0[0]}'.format)
    df_out = df_out.reset_index()
    print(df_out)
    

    输出:

        id      A_value      B_value
    0   92      123.123      32019.0
    1  105     9034.000       3281.0
    2  999      421.000          NaN
    

    【讨论】:

      【解决方案2】:

      使用pivotadd_suffix(通过@ScottBoston)和reset_index的简单解决方案

      df.pivot(index = 'id',columns = 'group',values = 'value')\
             .add_suffix('_value')\
             .reset_index()
      group     id   A_value  B_value
      0       92.0   123.123  32019.0
      1      105.0  9034.000   3281.0
      2      999.0   421.000      NaN
      

      【讨论】:

      • 看看在reset_index之前使用add_suffix('_value')
      • @ScottBoston 已更新。谢谢!
      • add_suffix 将字符串添加到所有列是否正确?如果原始数据框中还有另一个值列,你会怎么做?
      • @jerbear 你可以使用这个:.rename({'A':'A_value', 'B':'B_value'}, axis = 1)
      猜你喜欢
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 2021-09-24
      • 2019-01-07
      • 1970-01-01
      相关资源
      最近更新 更多