如何展平熊猫数据帧?

时间:2021-03-16 15:18:30

标签: python pandas dataframe

所以我得到了一个如下所示的数据框: 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 ...

有人知道如何用熊猫来做吗?

2 个答案:

答案 0 :(得分:3)

您可以使用 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 

答案 1 :(得分:1)

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

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]
相关问题