熊猫将列转换为行[重复]
Posted
技术标签:
【中文标题】熊猫将列转换为行[重复]【英文标题】: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
【问题讨论】:
【参考方案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()
【讨论】:
以上是关于熊猫将列转换为行[重复]的主要内容,如果未能解决你的问题,请参考以下文章