在多列pandas上应用“list”功能

时间:2016-11-01 09:55:25

标签: python list pandas apply

为了在Pandas中使用groupby将几行连接到1个列表,我可以这样做:

df = pd.DataFrame({'A': [1,1,2,2,2,2,3],'B':['a','b','c','d','e','f','g']})

df = df.groupby('A')['B'].apply(list)

我会得到:

A
-------------------
1          [a, b]
2    [c, d, e, f]
3             [g]

我想用agg做同样的事情:

f = {"B":[list]}
df = df.groupby('A').agg(f)

给出错误, 任何想法?

谢谢,

1 个答案:

答案 0 :(得分:7)

您可以使用tolist - 输出为Series

df = df.groupby('A')['B'].agg(lambda x: x.tolist())
print (df)
A
1          [a, b]
2    [c, d, e, f]
3             [g]
dtype: object

B中的定义列dict - 输出为DataFrame

df = df.groupby('A').agg({'B': lambda x: x.tolist()})
print (df)
              B
A              
1        [a, b]
2  [c, d, e, f]
3           [g]

也有效:

df = df.groupby('A')['B'].agg(lambda x: list(x))
print (df)
A
1          [a, b]
2    [c, d, e, f]
3             [g]
dtype: object

df = df.groupby('A').agg({'B': lambda x: list(x)})
print (df)
              B
A              
1        [a, b]
2  [c, d, e, f]
3           [g]