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

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日
  • 展开全部

悬赏问题

  • ¥15 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗