博'²º²¹ 2022-03-29 12:44 采纳率: 66.7%
浏览 63
已结题

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    笔

  • 写回答

2条回答 默认 最新

  • 陈年椰子 2022-03-29 15:24
    关注

    按你的思路
    这样试试

    df2 = df.groupby(['月','name']).agg({'list':lambda x:';'.join([ t if t != "" else t  for t in x])}).reset_index()
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月16日
  • 已采纳回答 4月8日
  • 修改了问题 3月29日
  • 修改了问题 3月29日
  • 展开全部