【发布时间】:2016-08-03 18:38:48
【问题描述】:
我有一个样本数据集:
import pandas as pd
import re
df = {'READID': [1,2,3 ,4,5 ,6,7 ,8,9],
'VG': ['LV5-F*01','LV5-F*01' ,'LV5-A*02','LV5-D*01','LV5-E*01','LV5-C*01','LV5-D*01','LV5-E*01','LV5-F*01'],
'Pro': [1,1,1,0.33,0.59,1,0.96,1,1]}
df = pd.DataFrame(df)
看起来像这样:
df
Out[12]:
Pro READID VG
0 1.00 1 LV5-F*01
1 1.00 2 LV5-F*01
2 1.00 3 LV5-A*02
3 0.33 4 LV5-D*01
4 0.59 5 LV5-E*01
5 1.00 6 LV5-C*01
6 0.96 7 LV5-D*01
7 1.00 8 LV5-E*01
8 1.00 9 LV5-F*01
我想对列“VG”进行分组,但只对每行的“*”之前的部分进行分组,然后按相同的值分组并将它们输出到单独的文件中。
我的概念是:
- 按列“VG”对数据集“df”进行分组
- 对于列“VG”的每一行,只查看“*”之前的部分,例如'LV5-F'、'LV5-A'、'LV5-D'等。
- 再次对数据集进行分组,但这次使用第 2 步中的相同值
- 将每个不同的分组集输出到单独的文件中。
希望输出,单独的单独文件:
'LV5-F.txt':
Pro READID VG
0 1.00 1 LV5-F*01
1 1.00 2 LV5-F*01
8 1.00 9 LV5-F*01
'LV5-A.txt':
Pro READID VG
2 1.00 3 LV5-A*02
'LV5-D.txt':
Pro READID VG
3 0.33 4 LV5-D*01
6 0.96 7 LV5-D*01
'LV5-E.txt':
Pro READID VG
4 0.59 5 LV5-E*01
7 1.00 8 LV5-E*01
'LV5-C.txt':
Pro READID VG
5 1.00 6 LV5-C*01
我的尝试:
(df.groupby('VG')
.apply(lambda x: re.findall('([0-9A-Z-]+)\*',x) )
.groupby('VG')
.apply(lambda gp: gp.to_csv('{}.txt'.format(gp.name), sep='\t', index=False))
)
但它在 '.apply(lambda x: re.findall('([0-9A-Z-]+)*',x)' 步骤失败了,我不确定为什么它不起作用因为当我在不作为 lambda 函数的情况下单独运行该代码时,它运行良好。
【问题讨论】: