pandas按多列groupby分组后结果用;连接,结果不符合预期
原数据:
data = {'月':[1,1,2,2,2,3,1,3,4],
'name':['a','a','b','b','a','c','c','c','c'],
'list':['纸','笔','书','纸','笔','书','书','笔','笔']}
df = pd.DataFrame(data)
月 name list
0 1 a 纸
1 1 a 笔
2 2 b 书
3 2 b 纸
4 2 a 笔
5 3 c 书
6 1 c 书
7 3 c 笔
8 4 c 笔
执行语句:
需求:按月和name分组,后将list内容用;连接
df1 = df.groupby(['月','name']).agg({'list':lambdax: ';'.join(str(x))}).reset_index()
月 name list
0 1 a 0; ; ; ; ;纸;\n;1; ; ; ; ;笔;\n;N;a;m;e;:; ;l;i;...
1 1 c 6; ; ; ; ;书;\n;N;a;m;e;:; ;l;i;s;t;,; ;d;t;y;p...
2 2 a 4; ; ; ; ;笔;\n;N;a;m;e;:; ;l;i;s;t;,; ;d;t;y;p...
3 2 b 2; ; ; ; ;书;\n;3; ; ; ; ;纸;\n;N;a;m;e;:; ;l;i;...
4 3 c 5; ; ; ; ;书;\n;7; ; ; ; ;笔;\n;N;a;m;e;:; ;l;i;...
5 4 c 8; ; ; ; ;笔;\n;N;a;m;e;:; ;l;i;s;t;,; ;d;t;y;p...
结果list和预期相差很远
正确需求结果:
月 name list
0 1 a 纸;笔
1 1 c 书
2 2 b 书;纸
3 2 a 笔
4 3 c 书;笔
5 4 c 笔
按你的思路
这样试试
df2 = df.groupby(['月','name']).agg({'list':lambda x:';'.join([ t if t != "" else t for t in x])}).reset_index()
import pandas as pd
data = {'月': [1, 1, 2, 2, 2, 3, 1, 3, 4],
'name': ['a', 'a', 'b', 'b', 'a', 'c', 'c', 'c', 'c'],
'list': ['纸', '笔', '书', '纸', '笔', '书', '书', '笔', '笔']}
df = pd.DataFrame(data)
df1=df.groupby(['月','name']).agg(list)
df2=df1
list1=[]
for i in df1['list']:
i=';'.join(i)
list1.append(i)
print(list1)
df2=df2.drop('list',axis=1)
df2['list']=list1
print(df2)