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

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

在帶有字符串和列表列的熊貓列上運行一個函數

在帶有字符串和列表列的熊貓列上運行一個函數

明月笑刀無情 2023-06-20 14:00:25
我正在嘗試在下面的“父”列和“子”列列表中的每個元素上運行幾段代碼。我的目標結果在“ resultsX ”列中:第一個代碼(顯示在 results1 列中)片段只需要兩個字符串并獲取每個字符串中的唯一字符總數:>>> len(set('max' + 'andi'))>>> 6第二段代碼(顯示在 results2 列中)計算兩個字符串中相同位置的字符數:>>> sum(1 if c1 == c2 else 0 for c1, c2 in zip('maxwell', ' axwell'))>>> 6我想在“parent”列和“children”列中的每個元素上運行這兩段代碼,分別獲取“ results1 和 results2”列中的內容:parent           children                       results1                                     results20   MAX          ['MAX', 'amx', 'akd']          [('MAX',3),('amx',3),('akd',5)]          [('MAX',3),('amx',0),('akd',0)]1   Sam          ['Sam','sammy','samsam']       [('Sam',3),('sammy',4), ('samsam',3)]      [('Sam',3),('sammy',3), ('samsam',3)]2   Larry        ['lar','lair','larrylamo']     [('lar',4),('lair',5), ('larrylamo',6)]  [('lar',3),('lair',3), ('larrylamo',5)]我在下面嘗試過這段代碼,但運行時出現錯誤:def total_chars(reference, value_list):    chars = []    for val in value_list:        totalChars = len(set(reference + val))        chars.append(val, reference)            return totalCharsdf.agg(lambda x: total_chars(df.parent,df.children), axis=1)>>> ValueError: operands could not be broadcast together with shapes (10000,) (4,) 有任何想法嗎?
查看完整描述

2 回答

?
慕容森

TA貢獻1853條經驗 獲得超18個贊

我相信你需要


def cust_func(row):

    results1 = []

    results2 = []

    p = row['parent'].lower()

    for i in row['children']:

        t = i.lower()

        results1.append((i, len(set(t + p))))

        results2.append((i, sum(int(k==v) for k,v in zip(t, p))))


    return pd.Series([results1, results2])

        


df = pd.DataFrame({"parent": ['Max', 'Sam', 'Larry'], "children": [['MAX', 'amx', 'akd'], ['Sam','sammy','samsam'], ['lar','lair','larrylamo']]})

df[['results1', 'results2']]  = df.apply(cust_func, axis=1)

print(df[['results1', 'results2']])

輸出:


                                results1                               results2

0         [(MAX, 3), (amx, 3), (akd, 5)]         [(MAX, 3), (amx, 1), (akd, 0)]

1    [(Sam, 3), (sammy, 4), (samsam, 3)]    [(Sam, 3), (sammy, 3), (samsam, 3)]

2  [(lar, 4), (lair, 5), (larrylamo, 6)]  [(lar, 3), (lair, 3), (larrylamo, 5)]


查看完整回答
反對 回復 2023-06-20
?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

沒有循環數據幀。只是一個用于位置明智比較的功能


df = pd.DataFrame([{'parent': 'MAX', 'children': ['MAX', 'amx', 'akd']},

 {'parent': 'Sam', 'children': ['Sam', 'sammy', 'samsam']},

 {'parent': 'Larry', 'children': ['lar', 'lair', 'larrylamo']}])


def placewise(a1, a2):

    s = 0

    for i in range(min(len(a1), len(a2))):

        if a1[i] == a2[i]: s += 1

    return s


df = (df.explode("children")

 .assign(

     results1=lambda x: x.apply(lambda r: (r["children"], 

                                           len(np.unique(np.concatenate([list(r["parent"].upper()), 

                                                                         list(r["children"].upper())])))

                                          ), axis=1),

     results2=lambda x: x.apply(lambda r: (r["children"], placewise(r["parent"].upper(), 

                                                                    r["children"].upper()

                                                                   )

                                          ), axis=1),

 )

 .groupby("parent", as_index=False).agg({"children":lambda x: list(x),

                                         "results1":lambda x: list(x),

                                         "results2":lambda x: list(x)})

 

)


print(df.to_string(index=False))

輸出


parent                children                               results1                               results2

 Larry  [lar, lair, larrylamo]  [(lar, 4), (lair, 5), (larrylamo, 6)]  [(lar, 3), (lair, 3), (larrylamo, 5)]

   MAX         [MAX, amx, akd]         [(MAX, 3), (amx, 3), (akd, 5)]         [(MAX, 3), (amx, 1), (akd, 0)]

   Sam    [Sam, sammy, samsam]    [(Sam, 3), (sammy, 4), (samsam, 3)]    [(Sam, 3), (sammy, 3), (samsam, 3)]



查看完整回答
反對 回復 2023-06-20
  • 2 回答
  • 0 關注
  • 171 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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