为了在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)
给出错误, 任何想法?
谢谢,
答案 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]