[英]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
melt
和pivot
组合就足够了:
(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.