用逗号分隔大熊猫列,然后按空格分隔每个项目,最后有一组列表

时间:2019-09-24 09:36:58

标签: python pandas lambda

我在python pandas数据框中有一列。每行都有一个python列表,如下所示。我想用逗号分割列表,然后将每个项目按空格分割,取第一个项目,然后终于有了一个集合,以删除该列表中的重复项。

  1. 初始数据集(pandas df)
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]))

如果有人可以对此有所解释,那就太好了。谢谢。

2 个答案:

答案 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
相关问题