Heim > Fragen und Antworten > Hauptteil
用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,其他的方法也可以
阿神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 赵六
高洛峰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)