パンダでの再帰的な操作

dfundako:

私はこのようなDataFrameを持っています:

vals = {"operator": [1, 1, 1, 2, 3, 5], "nextval": [2, 3, 6, 4, 5, 6]}
df = pd.DataFrame(vals)

   operator  nextval
0         1        2
1         1        3
2         1        6
3         2        4
4         3        5
5         5        6

私がやろうとしていることは、厳密に最短のパスではなく、演算子とnextvalsを使用して、1のような開始点と6のような終了点から可能なすべてのパスのリストを取得することです。出力は柔軟にすることができますが、私はこのようなもの、またはこれを伝えるものを探しています:

1 -> 6
1 -> 2 -> 4 
1 -> 3 -> 5 -> 6

私はそれに近づけることはできますが、dictは2つの同じキーを処理できないため、再帰を正しく行う方法がわかりません。

import pandas as pd

vals = {"operator": [1, 1, 1, 2, 3, 5], "nextval": [2, 3, 6, 4, 5, 6]}
df = pd.DataFrame(vals)

df1 = df.set_index("operator")

dictvals = {}
for x in df1.index.unique():
    dictvals[x] = []
    df2 = df1.loc[x]
    if isinstance(df2, pd.DataFrame):
        for idx, rowdata in df2.iterrows():
            dictvals[x].append(rowdata["nextval"])
    else:
        dictvals[x] = df2[0]

print(dictvals) 

{1: [2, 3, 6], 2: 4, 3: 5, 5: 6}
BEN_YO:

確認してくださいnetworkx、あなたが方向グラフを必要と'root'する'leaf'パス

import networkx as nx
G=nx.from_pandas_edgelist(df,source='operator',target='nextval', edge_attr=None, create_using=nx.DiGraph())
road=[]
for n in G:
       if G.out_degree(n)==0: #leaf
           road.append(nx.shortest_path(G, 1, n))
           
road
Out[82]: [[1, 2, 4], [1, 3, 5, 6]]

更新

import networkx as nx
G=nx.from_pandas_edgelist(df,source='operator',target='nextval', edge_attr=None, create_using=nx.DiGraph())
road=[]
for n in G:
       if G.out_degree(n)==0: #leaf
           road.append(list(nx.all_simple_paths(G, 1, n)))
           
road
Out[509]: [[[1, 3, 5, 6], [1, 6]], [[1, 2, 4]]]

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Swiftでの再帰的な配列操作

分類Dev

単純なコレクションでのSparkRDD再帰操作

分類Dev

パンダの再帰的定義

分類Dev

c ++での再帰的なフォルダースキャン

分類Dev

Unixでの再帰的なパイピング

分類Dev

ATSでのコンパイラフレンドリーな末尾再帰+末尾再帰チェック

分類Dev

再帰操作でパスの一部を取得する

分類Dev

パンダで時間のない帰りの日

分類Dev

Pythonで再帰を使用する基本的な操作の計算機

分類Dev

1つのファイルの異なる行で2つのパターンをサブフォルダーで再帰的にgrepする方法は?

分類Dev

パンダデータフレームの再帰的転置

分類Dev

パンダデータフレームの再帰関数

分類Dev

Pythonパンダの従業員階層再帰関数

分類Dev

Scala での再帰リスト操作

分類Dev

フォルダの下で再帰的なパラメータの値を変更する方法

分類Dev

オブジェクトのプロパティでの/の使用による再帰的な{パターン}置換

分類Dev

Pythonのメイン関数でトップダウン再帰

分類Dev

それぞれに列を追加している間、パンダの再帰的なread_csv

分類Dev

パンダでの複雑な時間操作

分類Dev

パンダのデータフレームで親と子の比率を再帰的に計算する

分類Dev

再帰関数の非網羅的なパターンエラー

分類Dev

postgresでの再帰パスファインディング

分類Dev

パイパーシングの再帰

分類Dev

wgetと再帰的なwgetでのファイルのダウンロードの防止

分類Dev

wgetと再帰的なwgetでのファイルのダウンロードの防止

分類Dev

再帰のダブルポインタが必要です

分類Dev

再帰のダブルポインタが必要です

分類Dev

java.util.Javaでのランダムと再帰

分類Dev

再帰的なsetTimeoutパターン

Related 関連記事

  1. 1

    Swiftでの再帰的な配列操作

  2. 2

    単純なコレクションでのSparkRDD再帰操作

  3. 3

    パンダの再帰的定義

  4. 4

    c ++での再帰的なフォルダースキャン

  5. 5

    Unixでの再帰的なパイピング

  6. 6

    ATSでのコンパイラフレンドリーな末尾再帰+末尾再帰チェック

  7. 7

    再帰操作でパスの一部を取得する

  8. 8

    パンダで時間のない帰りの日

  9. 9

    Pythonで再帰を使用する基本的な操作の計算機

  10. 10

    1つのファイルの異なる行で2つのパターンをサブフォルダーで再帰的にgrepする方法は?

  11. 11

    パンダデータフレームの再帰的転置

  12. 12

    パンダデータフレームの再帰関数

  13. 13

    Pythonパンダの従業員階層再帰関数

  14. 14

    Scala での再帰リスト操作

  15. 15

    フォルダの下で再帰的なパラメータの値を変更する方法

  16. 16

    オブジェクトのプロパティでの/の使用による再帰的な{パターン}置換

  17. 17

    Pythonのメイン関数でトップダウン再帰

  18. 18

    それぞれに列を追加している間、パンダの再帰的なread_csv

  19. 19

    パンダでの複雑な時間操作

  20. 20

    パンダのデータフレームで親と子の比率を再帰的に計算する

  21. 21

    再帰関数の非網羅的なパターンエラー

  22. 22

    postgresでの再帰パスファインディング

  23. 23

    パイパーシングの再帰

  24. 24

    wgetと再帰的なwgetでのファイルのダウンロードの防止

  25. 25

    wgetと再帰的なwgetでのファイルのダウンロードの防止

  26. 26

    再帰のダブルポインタが必要です

  27. 27

    再帰のダブルポインタが必要です

  28. 28

    java.util.Javaでのランダムと再帰

  29. 29

    再帰的なsetTimeoutパターン

ホットタグ

アーカイブ