一尘不染

Pandas DataFrame将多列值堆叠到单列中

python

假设以下DataFrame:

  key.0 key.1 key.2  topic
1   abc   def   ghi      8
2   xab   xcd   xef      9

如何将所有key。列的值组合到一个单独的列“ key”中,该列与与key。列对应的主题值相关联?这是我想要的结果:

   topic  key
1      8  abc
2      8  def
3      8  ghi
4      9  xab
5      9  xcd
6      9  xef

请注意,key.N列的数量在某些外部N上是可变的。


阅读 249

收藏
2020-12-20

共1个答案

一尘不染

您可以融化数据框:

>>> keys = [c for c in df if c.startswith('key.')]
>>> pd.melt(df, id_vars='topic', value_vars=keys, value_name='key')

   topic variable  key
0      8    key.0  abc
1      9    key.0  xab
2      8    key.1  def
3      9    key.1  xcd
4      8    key.2  ghi
5      9    key.2  xef

它还为您提供了密钥的来源。


v0.20melt是第一类功能pd.DataFrame类:

>>> df.melt('topic', value_name='key').drop('variable', 1)

   topic  key
0      8  abc
1      9  xab
2      8  def
3      9  xcd
4      8  ghi
5      9  xef
2020-12-20