【问题标题】:Unstack dataframe and keep columns取消堆叠数据框并保留列
【发布时间】:2017-05-29 15:18:22
【问题描述】:

我有一个过于“紧凑”的 DataFrame。 DataFrame 目前是这样的:

> import numpy as np
> import pandas as pd

> df = pd.DataFrame({'foo': ['A','B'],
               'bar': ['1', '2'],
               'baz': [np.nan, '3']})
  bar  baz foo
0   1  NaN   A
1   2    3   B

而且我需要将它“拆散”成这样:

> df = pd.DataFrame({'foo': ['A','B', 'B'],
               'type': ['bar', 'bar', 'baz'],
               'value': ['1', '2', '3']})

  foo type value
0   A  bar     1
1   B  bar     2
2   B  baz     3

无论我如何尝试旋转,我都无法正确。

【问题讨论】:

    标签: python pandas dataframe unpivot


    【解决方案1】:

    使用melt()方法:

    In [39]: pd.melt(df, id_vars='foo', value_vars=['bar','baz'], var_name='type')
    Out[39]:
      foo type value
    0   A  bar     1
    1   B  bar     2
    2   A  baz   NaN
    3   B  baz     3
    

    In [38]: pd.melt(df, id_vars='foo', value_vars=['bar','baz'], var_name='type').dropna()
    Out[38]:
      foo type value
    0   A  bar     1
    1   B  bar     2
    3   B  baz     3
    

    【讨论】:

      【解决方案2】:

      将您的索引设置为 foo,然后堆栈:

      df.set_index('foo').stack()
      
      foo     
      A    bar    1
      B    bar    2
           baz    3
      dtype: object
      

      【讨论】:

      • 这给出了一个系列而不是一个数据帧
      • @Rémi,添加 .reset_index() 会给你想要的结果 ;-)
      • 确实,它也有效。抱歉@Steven G,我无法将两个答案都标记为正确。
      猜你喜欢
      • 2023-01-11
      • 1970-01-01
      • 2023-02-16
      • 2021-06-02
      • 2021-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多