繁体   English   中英

在 Pandas DataFrame 中将多列转置为 1 列

[英]Transposing multiple columns to 1 column in pandas DataFrame

我正在处理具有多列的大型数据集。 它看起来类似于:

import pandas as pd

df = pd.DataFrame(
    {'Country': ["NL", "NL", "NL", "BE", "BE", "BE"],
     "Year": [2010, 2011, 2012, 2010, 2011, 2012],
     "Monkeys": [1, 4, 5, 2, 5, 4],
     "Giraffes": [40, 50, 60, 20, 30, 35],
     "Pigs": [10, 15, 20, 30, 35, 40]
     })

看起来像这样:

  Country  Year  Monkeys  Giraffes  Pigs
0      NL  2010        1        40    10
1      NL  2011        4        50    15
2      NL  2012        5        60    20
3      BE  2010        2        20    30
4      BE  2011        5        30    35
5      BE  2012        4        35    40

我希望它看起来像这样:

    Animals Country  2010  2011  2012
0   Monkeys      NL     1     4     5
1  Giraffes      NL    40    50    60
2      Pigs      NL    10    15    20
3   Monkeys      BE     2     5     4
4  Giraffes      BE    20    30    35
5      Pigs      BE    30    35    40

使用 pivot_table 和 pivot 方法我一直无法让它工作。 有没有人可以帮我解决这个问题?

用:

df = (df.set_index(['Country','Year'])
        .rename_axis('Animals', axis=1)
        .unstack([0,1])
        .unstack()
        .reset_index()
        .rename_axis(None, axis=1))
print (df)
    Animals Country  2010  2011  2012
0   Monkeys      BE     2     5     4
1   Monkeys      NL     1     4     5
2  Giraffes      BE    20    30    35
3  Giraffes      NL    40    50    60
4      Pigs      BE    30    35    40
5      Pigs      NL    10    15    20

meltpivot组合就足够了:

(df.melt(id_vars = ['Country', 'Year'], var_name='Animals')
   .pivot(index=['Animals', 'Country'], columns='Year', values = 'value')
   .reset_index()
   .rename_axis(columns=None)
)
 
    Animals Country  2010  2011  2012
0  Giraffes      BE    20    30    35
1  Giraffes      NL    40    50    60
2   Monkeys      BE     2     5     4
3   Monkeys      NL     1     4     5
4      Pigs      BE    30    35    40
5      Pigs      NL    10    15    20

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM