①test.csv中的内容:
cmd,opt
cmd1,opt1
cmd2,opt2 opt3 opt4
cmd2,opt2 opt5 opt6 opt7
cmd2,opt2 opt8 opt9 opt10
②用下面的方法读取CSV文件
import pandas as pd
data = pd.read_csv('test.csv')
③以cmd列为主键,合并opt列
变成下面的格式:
cmd1,opt
cmd2,opt2 opt3 opt4 opt2 opt5 opt6 opt7 opt2 opt8 opt9 opt10
请各位大神不吝赐教~!
最后自己解决了,其实我想要的结果不只是合并,目的是计算各个opt出现的比例。
1 df = pd.read_csv('test.csv',encoding='cp932') 2 useRateF = ('test_new.csv') 3 4 index_list_cmd = [] 5 #获取cmd列 6 index_list_cmd = df.cmd.values 7 idxLstCmd_cnt = Counter(list(index_list_cmd)) 8 #删除重复元素 9 index_list_cmd = sorted(set(list(index_list_cmd)), key=list(index_list_cmd).index) 10 11 #计算cmd出现的次数 12 cntLst = [] 13 for lst_i in range(len(index_list_cmd)): 14 cntLst.append(idxLstCmd_cnt[index_list_cmd[lst_i]]) 15 16 #合并opt列 17 index_list_opt_idx = [] 18 19 #删除之前保存的文件 20 if os.path.isfile(useRateF): 21 os.remove(useRateF) 22 23 for cmd_i in range(len(index_list_cmd)): 24 #获得opt列的index 25 index_list_opt_idx = list(df.opt[df.cmd == index_list_cmd[cmd_i]].index.values) 26 index_list_opt = [] 27 for opt_i in range(len(index_list_opt_idx)): 28 #生成新的列表 29 try: 30 index_list_opt.append(df.loc[int(index_list_opt_idx[opt_i]),'opt']) 31 except: 32 print(index_list_cmd[cmd_i]) 33 print(index_list_opt_idx[opt_i]) 34 print(opt_i) 35 #列表→字符串 36 str_idxLstOpt = ' '.join(index_list_opt) 37 #字符串→列表 38 lst_idxLstOpt = str_idxLstOpt.split(' ') 39 #计算opt出现的比例 40 for tag in sorted(set(lst_idxLstOpt), key=lst_idxLstOpt.index): 41 with open(useRateF, 'a',encoding='utf-8_sig') as uf: 42 uf.writelines(str(index_list_cmd[cmd_i]) + ',' + tag + ',' + str(lst_idxLstOpt.count(tag)/cntLst[cmd_i])) 43 uf.writelines('\n')