我有这样一个数据框
----------------
RecID| A |B
----------------
1 |Dog | x
2 |Dog | y
3 |Dog | z
4 |Cat | a
5 |Cat | b
想知道有没有办法把它改造成这样:
-----------------------------
RecID| A |B_1|B_2|B_3|
-----------------------------
1 |Dog| x | y | z |
2 |Cat| a | b | NA|
基本上为 B 的每个可能值创建新列,这些值按 A 的特定值分组,并在需要时用 NA 填充。
一种方式是
In [294]: (df.groupby('A', sort=False).B.apply(list)
.apply(pd.Series).add_prefix('B_').reset_index())
Out[294]:
A B_0 B_1 B_2
0 Dog x y z
1 Cat a b NaN
或者,
In [320]: (df.groupby('A', sort=False).B.apply(lambda x: pd.Series(x.values))
.unstack().rename(columns=lambda x: 'B_{}'.format(int(x)+1))
.reset_index())
Out[320]:
A B_1 B_2 B_3
0 Dog x y z
1 Cat a b None
我是一名优秀的程序员,十分优秀!