如何将一列中的所有列表编译为一个唯一列表

如何将一列中的所有列表编译为一个唯一列表,第1张

如何将一列中的所有列表编译为一个唯一列表

导出

Series
嵌套
lists
然后应用于
set
拼合列表的另一种解决方案:

df = pd.Dataframe({'id':['a','b', 'c'], 'val':[['val1','val2'],   ['val33','val9','val6'],   ['val2','val6','val7']]})print (df)  id       val0  a         [val1, val2]1  b  [val33, val9, val6]2  c   [val2, val6, val7]print (type(df.val.ix[0]))<class 'list'>print (df.val.tolist())[['val1', 'val2'], ['val33', 'val9', 'val6'], ['val2', 'val6', 'val7']]print (list(set([a for b in df.val.tolist() for a in b])))['val7', 'val1', 'val6', 'val33', 'val2', 'val9']

时间

df = pd.concat([df]*1000).reset_index(drop=True)In [307]: %timeit (df['val'].apply(pd.Series).stack().unique()).tolist()1 loop, best of 3: 410 ms per loopIn [355]: %timeit (pd.Series(sum(df.val.tolist(),[])).unique().tolist())10 loops, best of 3: 31.9 ms per loopIn [308]: %timeit np.unique(np.hstack(df.val)).tolist()100 loops, best of 3: 10.7 ms per loopIn [309]: %timeit (list(set([a for b in df.val.tolist() for a in b])))1000 loops, best of 3: 558 µs per loop

如果类型不是

list
,则
string
使用
str.strip
str.split

df = pd.Dataframe({'id':['a','b', 'c'], 'val':["[val1,val2]",   "[val33,val9,val6]",   "[val2,val6,val7]"]})print (df)  id     val0  a        [val1,val2]1  b  [val33,val9,val6]2  c   [val2,val6,val7]print (type(df.val.ix[0]))<class 'str'>print (df.val.str.strip('[]').str.split(','))0[val1, val2]1    [val33, val9, val6]2     [val2, val6, val7]Name: val, dtype: objectprint (list(set([a for b in df.val.str.strip('[]').str.split(',') for a in b])))['val7', 'val1', 'val6', 'val33', 'val2', 'val9']


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5647395.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存