登录

python - 关于Pandas数据分组展示

用Pandas建立一个DataFrame的数据:

流水号 处理人 处理时间
10000 张三 2016-10-01
10000 李四 2016-10-02
10001 王五 2016-10-01
10002 赵六 2016-10-03
10001 黄七 2016-10-02
10000 吴八 2016-10-03

要如何处理才能按流水号分组,然后将处理人合并展示(用、或者其他字符连接),类似下表:

流水号 处理人
10000 张三、李四、吴八
10001 王五、黄七
10002 赵六

或者不用Pandas,其他的方法也可以

# Python
巴扎黑巴扎黑2201 天前440 次浏览

全部回复(2) 我要回复

  • 阿神

    阿神2017-04-18 09:46:36

    感觉是个挺典型的groupby函数例子:

    cols = ['流水号', '处理人', '处理时间']
    data = [[10000, '张三', '2016-10-01'],
            [10000, '李四', '2016-10-02'],
            [10001, '王五', '2016-10-01'],
            [10002, '赵六', '2016-10-03'],
            [10001, '黄七', '2016-10-02'],
            [10000, '吴八', '2016-10-03']]
    frame = pd.DataFrame(data,columns=cols)
    
    def combination(names):
        return ','.join(names)
        
    frame.groupby('流水号').aggregate(combination)

    输出结果应该是这样:

    In [12]: frame.groupby('流水号').aggregate(combinition)
    Out[12]: 
                处理人                              处理时间
    流水号                                              
    10000  张三,李四,吴八  2016-10-01,2016-10-02,2016-10-03
    10001     王五,黄七             2016-10-01,2016-10-02
    10002        赵六  

    回复
    0
  • 高洛峰

    高洛峰2017-04-18 09:46:36

    python3

    import pandas as pd
    
    cols = ['流水号', '处理人', '处理时间']
    data = [[10000, '张三', '2016-10-01'],
            [10000, '李四', '2016-10-02'],
            [10001, '王五', '2016-10-01'],
            [10002, '赵六', '2016-10-03'],
            [10001, '黄七', '2016-10-02'],
            [10000, '吴八', '2016-10-03']]
    
    df = pd.DataFrame(data,columns=cols)
    grp = [(n, ','.join([r for r in set(df[df['流水号']==n]['处理人'])]))
                           for n in set(df['流水号'])]
    
    df2 = pd.DataFrame(grp, columns=cols[:-1])
    print(df)
    print(df2)
    

    回复
    0
  • 取消回复发送