这样就可以了,使用.agg()
:
In [15]:
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'foo'],
'C' : np.asarray([1,2,3,4,5,6,7,8]),
'D' : np.asarray([2,3,4,5,6,7,8,9])})
In [16]:
print df.groupby('A').agg(lambda x: list(x))
C D
A
bar [2, 4, 6] [3, 5, 7]
foo [1, 3, 5, 7, 8] [2, 4, 6, 8, 9]
我以为df.groupby('A').C.agg(list)
也应该有效。但显然不会。
如果你想使用apply
这是可以完成的,但是您将丢失列名称:
In [35]:
print df.groupby('A').apply(lambda x: pd.Series(list(x.T.values)))
0 1 2
A
bar [bar, bar, bar] [2, 4, 6] [3, 5, 7]
foo [foo, foo, foo, foo, foo] [1, 3, 5, 7, 8] [2, 4, 6, 8, 9]
将结果投射到Series
至关重要,否则你会得到:
In [36]:
print df.groupby('A').apply(lambda x: list(x.T.values))
A
bar [[bar, bar, bar], [2, 4, 6], [3, 5, 7]]
foo [[foo, foo, foo, foo, foo], [1, 3, 5, 7, 8], [...
dtype: object