第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

熊貓數(shù)據(jù)框中的遞歸函數(shù)

熊貓數(shù)據(jù)框中的遞歸函數(shù)

瀟湘沐 2023-05-16 15:52:19
我創(chuàng)建了以下數(shù)據(jù)框import pandas as pd    df = pd.DataFrame({'parent': ['AC1', 'AC2', 'AC3', 'AC1', 'AC11', 'AC5', 'AC5', 'AC6', 'AC8', 'AC9'],                   'child': ['AC2', 'AC3', 'AC4', 'AC11', 'AC12', 'AC2', 'AC6', 'AC7', 'AC9', 'AC10']})輸出以下內(nèi)容:    parent  child0   AC1     AC21   AC2     AC32   AC3     AC43   AC1     AC114   AC11    AC125   AC5     AC26   AC5     AC67   AC6     AC78   AC8     AC99   AC9     AC10我想創(chuàng)建一個(gè)結(jié)果數(shù)據(jù)框,其中列出了每個(gè)父項(xiàng)(意味著它不存在于子列中)和最后一個(gè)子項(xiàng)。df_result = pd.DataFrame({'parent': ['AC1', 'AC1', 'AC5', 'AC5', 'AC8', 'AC2'],                     'child': ['AC4', 'AC12', 'AC4', 'AC7', 'AC10', 'AC4']})    parent  child0   AC1     AC41   AC1     AC122   AC5     AC43   AC5     AC74   AC8     AC105   AC2     AC4我已經(jīng)啟動(dòng)了以下功能,但我不確定如何完成它。def get_child(df):result = {}if df['parent'] not in df['child']:    return result[df['parent']]
查看完整描述

2 回答

?
一只甜甜圈

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊

這是一個(gè)樹結(jié)構(gòu),一種特殊類型的圖。數(shù)據(jù)框并不是表示樹的特別方便的方式;我建議您切換到networkx或其他一些基于圖形的包。然后查找如何進(jìn)行簡(jiǎn)單的路徑遍歷;您會(huì)在圖形包文檔中找到直接支持。


如果你堅(jiān)持自己做——這是一個(gè)合理的編程練習(xí)——你只需要像這樣的偽代碼


for each parent not in "child" column:

    here = parent

    while here in parent column:

        here = here["child"]


    record (parent, here) pair


查看完整回答
反對(duì) 回復(fù) 2023-05-16
?
互換的青春

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

雖然您的預(yù)期輸出似乎與您的描述有些不一致(AC2 似乎不應(yīng)該被視為父節(jié)點(diǎn),因?yàn)樗皇窃垂?jié)點(diǎn)),但我非常有信心您想從每個(gè)源節(jié)點(diǎn)運(yùn)行遍歷以定位它所有的葉子。在數(shù)據(jù)框中這樣做并不方便,因此我們可以使用df.values并創(chuàng)建一個(gè)鄰接列表字典來(lái)表示圖形。我假設(shè)圖中沒(méi)有循環(huán)。


import pandas as pd

from collections import defaultdict


def find_leaves(graph, src):

? ? if src in graph:

? ? ? ? for neighbor in graph[src]:

? ? ? ? ? ? yield from find_leaves(graph, neighbor)

? ? else:

? ? ? ? yield src


def pair_sources_to_leaves(df):

? ? graph = defaultdict(list)

? ? children = set()


? ? for parent, child in df.values:

? ? ? ? graph[parent].append(child)

? ? ? ? children.add(child)


? ? leaves = [[x, list(find_leaves(graph, x))]?

? ? ? ? ? ? ? ?for x in graph if x not in children]

? ? return (pd.DataFrame(leaves, columns=df.columns)

? ? ? ? ? ? ? .explode(df.columns[-1])

? ? ? ? ? ? ? .reset_index(drop=True))


if __name__ == "__main__":

? ? df = pd.DataFrame({

? ? ? ? "parent": ["AC1", "AC2", "AC3", "AC1", "AC11",?

? ? ? ? ? ? ? ? ? ?"AC5", "AC5", "AC6", "AC8", "AC9"],

? ? ? ? "child": ["AC2", "AC3", "AC4", "AC11", "AC12",?

? ? ? ? ? ? ? ? ? "AC2", "AC6", "AC7", "AC9", "AC10"]

? ? })

? ? print(pair_sources_to_leaves(df))

輸出:


? parent child

0? ? AC1? ?AC4

1? ? AC1? AC12

2? ? AC5? ?AC4

3? ? AC5? ?AC7

4? ? AC8? AC10


查看完整回答
反對(duì) 回復(fù) 2023-05-16
  • 2 回答
  • 0 關(guān)注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)