我有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
。
答案 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