如何使用pandas将Series重新排列为DataFrame

时间:2015-11-05 07:15:37

标签: python pandas dataframe series

我有Series如下:

In [37]: ser
Out[37]: 
Aa    0
Ab    1
Ac    2
Ba    3
Bb    4
Bc    5
Ca    6
Cb    7
Cc    8
dtype: int3

我想将其重新排列为DataFrame

   a  b  c
A  0  1  2
B  3  4  5 
C  6  7  8

这是我没有运气的尝试:

In [38]: ser.groupby(lambda i: i[0]).apply(lambda x: x.rename({i: i[1] for i in x.index}).to_frame())
Out[38]: 
      A   B   C
A a   0 NaN NaN
  b   1 NaN NaN
  c   2 NaN NaN
B a NaN   3 NaN
  b NaN   4 NaN
  c NaN   5 NaN
C a NaN NaN   6
  b NaN NaN   7
  c NaN NaN   8

修改 我发现了以下密切关注:

In [50]: ser.groupby(lambda i: i[0]).apply(lambda x: x.rename({i: i[1] for i in x.index}).to_frame().transpose())
Out[50]: 
     a  b  c
A A  0  1  2
B B  3  4  5
C C  6  7  8

但是,它有MultiIndex

3 个答案:

答案 0 :(得分:4)

你走了:

ser.groupby(lambda i: i[0]).apply(lambda x: x.rename({i: i[1] for i in x.index})).unstack()

你很亲密!

答案 1 :(得分:2)

为了清晰起见,我会更加冗长。

s

这会从

转换系列Aa 0 Ab 1 Ac 2 Ba 3 Bb 4 Bc 5 Ca 6 Cb 7 Cc 8 Name: data, dtype: int64
df

到DataFrame lowercase a b c capitals A 0 1 2 B 3 4 5 C 6 7 8

  <?php
echo date('Y-m-d H:i:s',strtotime('2014-01-07T16:19:08Z'));
?>

答案 2 :(得分:2)

In [235]:
df = pd.DataFrame(data = { 'key' : ser.index.values , 'value' :ser.values })
df
Out[235]:
    key value
0   Aa  0
1   Ab  1
2   Ac  2
3   Ba  3
4   Bb  4
5   Bc  5
6   Ca  6
7   Cb  7
8   Cc  8

In [251]:
df['key_1'] = df.key.str.extract('(^\w)')
df
Out[251]:
    key value   key_1   
0   Aa  0          A    
1   Ab  1          A    
2   Ac  2          A    
3   Ba  3          B    
4   Bb  4          B    
5   Bc  5          B    
6   Ca  6          C    
7   Cb  7          C    
8   Cc  8          C    

In [252]:
df['key_2'] = df.key.str.extract('(\w$)')
df
Out[252]:
    key    value    key_1   key_2
0   Aa         0    A       a
1   Ab         1    A       b
2   Ac         2    A       c
3   Ba         3    B       a
4   Bb         4    B       b
5   Bc         5    B       c
6   Ca         6    C       a
7   Cb         7    C       b
8   Cc         8    C       c

In [253]:
df.pivot(index='key_1' , columns='key_2' , values='value')
Out[253]:
key_2   a   b   c
key_1           
A       0   1   2
B       3   4   5
C       6   7   8