我在python pandas数据框中有一列。每行都有一个python列表,如下所示。我想用逗号分割列表,然后将每个项目按空格分割,取第一个项目,然后终于有了一个集合,以删除该列表中的重复项。
MATERIAL
A 2L XXX, B 4L XXX, C 6L XXX, A 2L XXX
B 2L XXX, C 4L XXX, C 6L XXX, B 2L XXX
A 2L XXX, H 4L XXX, L 6L XXX, L 6L XXX, A 2L XXX,
M 2L XXX, N 4L XXX, P 6L XXX, L 6L XXX
需要输出
MATERIAL
A, B, C
B, C
A, H, L
M, N, P, L
如果我在一列中只有一个项目,则str.split()。str [0]可以工作,并且我可以得到第一个项目(拆分后),并且可以工作
但是当我尝试使用以下lambda函数查找列中的项目列表时,出现错误,无法实现上述输出
productList['MATERIAL'] = productList['MATERIAL'].apply(lambda g: ','.join([productList['MATERIAL'].str.split().str[0] for n in g]))
如果有人可以对此有所解释,那就太好了。谢谢。
答案 0 :(得分:1)
用一行lambda
创建一个列表:
df['MATERIAL'] = df['MATERIAL'].map(lambda x: sorted(list(set(val.strip().split(' ')[0] for val in x.split(',')))))
答案 1 :(得分:0)
如果每行的输出顺序并不重要,请使用一组来保留唯一值。
lines_per_file = 2
for lineno, line in enumerate(A):
if lineno % lines_per_file == 0:
if smallfile:
smallfile.close()
small_filename = 'small_file_{}.txt'.format(lineno + lines_per_file)
smallfile = open(small_filename, "w")
smallfile.write('\n'.join(str(x) for x in line)+'\n\n') # <= add a second \n
smallfile.close()
如果输出的顺序很重要,请使用OrderedDict保留顺序并将其转换回列表。
productList['MATERIAL'] = productList['MATERIAL'].apply(lambda g: ', '.join(set((n.split()[0] for n in g.split(', ')))))
MATERIAL
0 B, C, A
1 C, B
2 H, L, A
3 L, N, P, M