【问题标题】:How do I convert multiple columns to individual rows/values if there is no other unique column in pandas?如果 pandas 中没有其他唯一列,如何将多列转换为单独的行/值?
【发布时间】:2021-10-10 10:08:28
【问题描述】:

下面是例子

Rates, values 2019Q01 Rates, values 2019Q02 Rates, values 2019Q03 Rates, values 2019Q04 Sales, values 2019Q01 Sales, values 2019Q02 Sales, values 2019Q03 Sales, values 2019Q04
100 150 200 300 400 450 500 600

结果应该是

Period Rates, values Sales, values
2019Q01 100 400
2019Q02 150 450
2019Q03 200 500
2019Q04 300 600

我尝试过melt 和wide_to_long,但无法得到结果。谢谢

【问题讨论】:

    标签: python pandas numpy data-science backend


    【解决方案1】:

    尝试通过columns 属性然后stack()

    df.columns=df.columns.str.replace('values','').str.split(', ',expand=True)
    df=df.stack().droplevel(0).rename_axis(index='Period').add_suffix(', values').reset_index()
    

    或者按照@Cytorak的建议

    df.columns = df.columns.str.rsplit(' ', 1, expand=True)
    df=df.stack().droplevel(0).rename_axis(index='Period').reset_index()
    

    df的输出:

        Period      Rates, values   Sales, values
    0   2019Q01     100             400
    1   2019Q02     150             450
    2   2019Q03     200             500
    3   2019Q04     300             600
    

    【讨论】:

    • 感谢您的回答,但我也想要,价值观,我不想替换它
    • 建议将以下内容作为第一行:df.columns = df.columns.str.rsplit(' ', 1, expand=True)
    • 感谢您的意见 :)
    • @AnuragDabas 在我的结果表中,我得到最后一列名称未命名:每行都有 NaN 值。你知道它为什么会来吗?我该如何删除它?
    • @SSS 先生使用df=df.dropna(axis=1,how='all')
    猜你喜欢
    • 2021-06-07
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    相关资源
    最近更新 更多