pandas按多列groupby分组后另一列结果用;连接,输出结果不符合预期

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    a1    1    a2    2    b3    2    b4    2    a5    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)