【问题标题】:Pivot only certain values in a column仅透视列中的某些值
【发布时间】:2018-01-16 11:17:37
【问题描述】:

我有这样的dataframes(key_的个数总是等于value_的个数,但是这个数字是事先不知道的):

    firstid    secondid    key_1    key_2    key_3    ...    key_n    value_1    value_2    value_3    ...    value_n
      1          one         A        B        C       ...    Z        alpha    beta          gamma    ...    omega

我想把它们改造成这种格式:

first_id    second_id    key    value
1             one         A    alpha
1             one         B    beta
1             one         C    gamma
1             one         ...    ...
1             one         Z    omega

通过像这样使用melt...

value_vars = [x for x in df.columns if x.startswith('key_') or x.startswith('value_')]

df = pd.melt(df, id_vars=["firstid",
                            "secondid"],
              value_vars=value_vars)

...我得到这个结果:

   firstid secondid variable  value
0        1      one    key_1      A
1        1      one    key_2      B
2        1      one    key_3      C
3        1      one    key_n      Z
4        1      one  value_1  alpha
5        1      one  value_2   beta
6        1      one  value_3  gamma
7        1      one  value_n   omega

这显然仍然是一个步骤,但我无法弄清楚在融化、枢轴、堆叠等丛林中是哪一个。欢迎任何解释或线索。

【问题讨论】:

    标签: python pandas reshape


    【解决方案1】:

    我认为你需要:


    df = df.set_index(['firstid','secondid'])
    df.columns = df.columns.str.split('_', expand=True)
    df = df.stack().reset_index(level=2, drop=True).reset_index()
    print (df)
       firstid secondid key  value
    0        1      one   A  alpha
    1        1      one   B   beta
    2        1      one   C  gamma
    3        1      one   Z   zeta
    

    【讨论】:

    • 结果很完美,非常感谢!我不明白你所做的一切,所以我不能自己再做一次,但我至少知道我需要完善哪些功能。
    • 恭喜获得 200k :)
    • @cᴏʟᴅsᴘᴇᴇᴅ - 谢谢。 ;)
    猜你喜欢
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多