亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

比較 Pandas 中的列表元素和子列表元素

比較 Pandas 中的列表元素和子列表元素

RISEBY 2023-07-27 17:54:28
dfcol1                       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的第二個子列表元素col2。結果將類似于此列:results[['aaee', 'bbff', 'ccgg', 'ddhh'],['aaqq', 'bbww', 'ccee', 'ddrr']][['ssmm', 'ddnn', 'ffvv', 'ggcc'],['sszz', 'ddaa', 'ffjj', 'ggkk']][['ssmm', 'ddnn'],['sszz', 'ddaa']]我認為這與循環遍歷第一個元素有關,col1并以某種方式循環并將它們與每個子列表中的相應項目相匹配col2- 我該怎么做?轉換后的代碼[[[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'])]結果:
查看完整描述

3 回答

?
慕絲7291255

TA貢獻1859條經驗 獲得超6個贊

你可以zip在這里使用:


[[[u+w for u,w in zip(x,v)] for v in y] for x,y in zip(df['col1'], df['col2'])]

輸出:


[[['aaee', 'bbff', 'ccgg', 'ddhh'], ['aaqq', 'bbww', 'ccee', 'ddrr']],

 [['ssmm', 'ddnn', 'ffvv', 'ggcc'], ['sszz', 'ddaa', 'ffjj', 'ggkk']],

 [['ssmm', 'ddnn'], ['sszz', 'ddaa']]]

要分配回您的數據框,您可以執行以下操作:


df['results'] = [[[u+w for u,w in zip(x,v)] for v in y] 

            for x,y in zip(df['col1'], df['col2'])]


查看完整回答
反對 回復 2023-07-27
?
holdtom

TA貢獻1805條經驗 獲得超10個贊

Max,循環嘗試這個解決方案。它允許對轉換進行更精細的控制,包括處理不均勻的長度(參見len_limit示例):


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


查看完整回答
反對 回復 2023-07-27
?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

嘗試:


df["results"] = df[["col1", "col2"]].apply(lambda x: [list(map(''.join, zip(x["col1"], el))) for el in x["col2"]], axis=1)

輸出:


>>> df["results"]


0    [[aaee, bbff, ccgg, ddhh], [aaqq, bbww, ccee, ...

1    [[ssmm, ddnn, ffvv, ggcc], [sszz, ddaa, ffjj, ...

2                         [[ssmm, ddnn], [sszz, ddaa]]


查看完整回答
反對 回復 2023-07-27
  • 3 回答
  • 0 關注
  • 176 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號