【问题标题】:How to flatten a pandas DataFrame?如何展平熊猫数据框?
【发布时间】:2021-06-13 21:47:30
【问题描述】:

所以我得到了一个如下所示的数据框: Original DataFrame

df = pd.DataFrame({'0': ['a', 'b', 'c', 'd'],
                  '1': [123,145,293,403],
                  '2': [402,103,242,757],
                  '3': [3.121,4.55,0,9.32],
                  '4': ['3T', '4B', '400B', '400T']})

我需要转换那个 DataFrame,使它看起来像这样:

a_1 a_2 a_3 a_4 b_1 b_2 b_3 b_4 ...
123 402 3.121 3T 145 103 4.555 4B ...

有人知道怎么用熊猫做吗?

【问题讨论】:

  • 请将原始数据粘贴为问题中的文本。
  • 将数据添加为文本@Cyttorak
  • 重新格式化您的问题。即“如何展平数据框”。更多的人将能够帮助你。我现在无能为力,但我很确定您应该阅读有关数据透视表的文档,因为它看起来是要走的路。 pandas.pydata.org/docs/user_guide/reshaping.html

标签: python pandas dataframe


【解决方案1】:

你可以使用stack() 然后transpose

s = df.set_index('0').stack()
s.index = [f"{x}_{y}" for x,y in s.index]

s.to_frame('').T

  a_1  a_2    a_3 a_4  b_1  b_2   b_3 b_4  c_1  c_2 c_3   c_4  d_1  d_2   d_3  \
  123  402  3.121  3T  145  103  4.55  4B  293  242   0  400B  403  757  9.32   

   d_4  
  400T 

【讨论】:

    【解决方案2】:

    您可以旋转您的数据框,然后对其列进行重命名和排序:

    tmp = df.assign(ix=0).pivot('ix', '0', list('1234'))
    result = tmp.set_axis(['{1}_{0}'.format(*i) for i in tmp.columns], axis=1).sort_index(axis=1)
    

    使用您的数据,它按预期提供:

       a_1  a_2    a_3 a_4  b_1  b_2   b_3  ...  c_2  c_3   c_4  d_1  d_2   d_3   d_4
    0  123  402  3.121  3T  145  103  4.55  ...  242  0.0  400B  403  757  9.32  400T
    
    [1 rows x 16 columns]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-03
      • 2016-11-29
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-15
      • 1970-01-01
      相关资源
      最近更新 更多