【问题标题】:Pandas converting column to rows [duplicate]熊猫将列转换为行[重复]
【发布时间】:2019-05-22 09:44:39
【问题描述】:

我有以下 Python 熊猫数据框:

id| country  | 2016 | 2017 | 2018
--+----------+------+------+------
0 | saudi    | A    | null | B
1 | china    | C    | A    | B
2 | pakistan | null | null | C

我想要:

id| country  | year | value
--+----------+------+------
0 | saudi    | 2016 | A
1 | saudi    | 2018 | B
2 | china    | 2016 | C
3 | china    | 2017 | A
4 | china    | 2018 | B
5 | pakistan | 2018 | C

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以使用df.melt

    df.melt(['id','country'], df.columns[2:]).dropna()
    
        id  country variable  value
    0   0   saudi     2016     A
    6   0   saudi     2018     B
    1   1   china     2016     C
    4   1   china     2017     A
    7   1   china     2018     B
    8   2   pakistan  2018     C
    

    如果需要,只需添加.sort_values('id')

    或者你可以使用stack

    df.set_index(['id','country']).stack().to_frame()
    

    如果你愿意,然后是.reset_index()

    看起来使用stack 会更高效一些:

    melt: 11.3 ms ± 798 µs per loop (mean ± std. dev. of 3 runs, 1000 loops each)
    
    stack: 9.18 ms ± 594 µs per loop (mean ± std. dev. of 3 runs, 1000 loops each)
    

    【讨论】:

      【解决方案2】:

      是的,你也可以使用 unstack df2=df.unstack() 然后 df2.reset_index()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-08
        • 1970-01-01
        • 2017-10-29
        • 2019-05-25
        • 2022-12-18
        • 2017-04-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多