首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较Pandas中的列表元素和子列表元素

比较Pandas中的列表元素和子列表元素
EN

Stack Overflow用户
提问于 2020-09-11 20:19:39
回答 3查看 82关注 0票数 0

df

代码语言:javascript
复制
col1                       col2
['aa', 'bb', 'cc', 'dd']   [['ee', 'ff', 'gg', 'hh'], ['qq', 'ww', 'ee', 'rr']]
['ss', 'dd', 'ff', 'gg']   [['mm', 'nn', 'vv', 'cc'], ['zz', 'aa', 'jj', 'kk']]
['ss', 'dd']               [['mm', 'nn', 'vv', 'cc'], ['zz', 'aa', 'jj', 'kk']]

我希望能够运行一个函数,将col1中的第一个列表元素连接到col2中的第一个子列表元素(有多个子列表),然后将col1中的第二个list元素连接到col2中的第二个子列表元素。

结果将类似于本专栏:

代码语言:javascript
复制
results
[['aaee', 'bbff', 'ccgg', 'ddhh'],['aaqq', 'bbww', 'ccee', 'ddrr']]
[['ssmm', 'ddnn', 'ffvv', 'ggcc'],['sszz', 'ddaa', 'ffjj', 'ggkk']]
[['ssmm', 'ddnn'],['sszz', 'ddaa']]

我在想,这将与循环遍历col1中的第一个元素有关,并以某种方式循环并将它们与col2中每个子列表中的相应项匹配--我如何做到这一点?

转换代码

代码语言:javascript
复制
[[[df1.agg(lambda x: get_top_matches(u,w), axis=1) for u,w in zip(x,v)]\
for v in y] for x,y in zip(df1['parent_org_name_list'], df1['children_org_name_sublists'])]

结果:

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-09-11 20:38:53

您只需在这里使用zip

代码语言:javascript
复制
[[[u+w for u,w in zip(x,v)] for v in y] for x,y in zip(df['col1'], df['col2'])]

输出:

代码语言:javascript
复制
[[['aaee', 'bbff', 'ccgg', 'ddhh'], ['aaqq', 'bbww', 'ccee', 'ddrr']],
 [['ssmm', 'ddnn', 'ffvv', 'ggcc'], ['sszz', 'ddaa', 'ffjj', 'ggkk']],
 [['ssmm', 'ddnn'], ['sszz', 'ddaa']]]

若要将数据分配回数据,可以执行以下操作:

代码语言:javascript
复制
df['results'] = [[[u+w for u,w in zip(x,v)] for v in y] 
            for x,y in zip(df['col1'], df['col2'])]
票数 3
EN

Stack Overflow用户

发布于 2020-09-11 20:52:43

麦克斯,用循环来尝试这个解决方案。它允许更好地控制转换,包括处理不均匀长度(参见示例中的len_limit ):

代码语言:javascript
复制
import pandas as pd
df = pd.DataFrame({'c1':[['aa', 'bb', 'cc', 'dd'],['ss', 'dd', 'ff', 'gg']],
                   'c2':[[['ee', 'ff', 'gg', 'hh'], ['qq', 'ww', 'ee', 'rr']],
                         [['mm', 'nn', 'vv', 'cc'], ['zz', 'aa', 'jj', 'kk']]],})  

df ['c3'] = 'empty'  # send string to 'c3' so it is object data type
print(df)
                 c1                                    c2     c3
0  [aa, bb, cc, dd]  [[ee, ff, gg, hh], [qq, ww, ee, rr]]  empty
1  [ss, dd, ff, gg]  [[mm, nn, vv, cc], [zz, aa, jj, kk]]  empty

for i, row  in df.iterrows():
    c3_list = []
    len_limit = len (row['c1']
    for c2_sublist in row['c2']:
        c3_list.append([j1+j2 for j1, j2 in zip(row['c1'], c2_sublist[:len_limit])])
    df.at[i, 'c3'] = c3_list
    
print (df['c3'])

0    [[aaee, bbff, ccgg, ddhh], [aaqq, bbww, ccee, ...
1    [[ssmm, ddnn, ffvv, ggcc], [sszz, ddaa, ffjj, ...
Name: c3, dtype: object
票数 1
EN

Stack Overflow用户

发布于 2020-09-11 21:53:33

尝试:

代码语言:javascript
复制
df["results"] = df[["col1", "col2"]].apply(lambda x: [list(map(''.join, zip(x["col1"], el))) for el in x["col2"]], axis=1)

产出:

代码语言:javascript
复制
>>> df["results"]

0    [[aaee, bbff, ccgg, ddhh], [aaqq, bbww, ccee, ...
1    [[ssmm, ddnn, ffvv, ggcc], [sszz, ddaa, ffjj, ...
2                         [[ssmm, ddnn], [sszz, ddaa]]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63853805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档