1
私はアフィリエーションマトリックスに似たDataFrameを持っています。私は人、イベント、イベントの年を持っています。投影されたグラフのエッジに属性を追加する
d = {'person' : ['1', '2', '3', '1', '4', '3', '4', '1', '2'],
'event' : ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'D', 'D'],
'year' : [1995, 1995, 1995, 1996, 1996, 2000, 2000, 2001, 2001]}
df = pd.DataFrame(d)
私は2人の間で最初のミーティングをする必要があります。つまり、イベント「A」と「D」で「1」と「2」が出会ったとき、初めて会ったときを知る必要があります(この例では、1995年に「A」でした)。
私はこれがNetworkXを使用して可能かどうか、またはPandasを使用して別の方法で行う必要があるかどうかわかりません。これどうやってするの?
私は投影されたネットワークに行くことができますが、投影されたネットワークの端に属性 '年'をどのように転送するのか分かりません。属性(この場合は「年」)はイベントの属性であるため、各イベントのすべてのエッジで一定であることに注意することが重要です。
import networkx as nx
import pandas as pd
d = {'person' : ['1', '2', '3', '1', '4', '3', '4', '1', '2'],
'event' : ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'D', 'D'],
'year' : [1995, 1995, 1995, 1996, 1996, 2000, 2000, 2001, 2001]}
df = pd.DataFrame(d)
B = nx.from_pandas_dataframe(df, 'person', 'event', edge_attr='year')
G = nx.bipartite.projected_graph(B, df.person.unique(), multigraph = True)
元の回答の誤りを修正しました。私は間違った場所でソートしましたが、今は良いはずです。これがあなたのユースケースに合わないのかどうか教えてください。 – 3novak
@ 3novakありがとう!それはうまくいく。私はこれが大規模なデータセットでどのように実行されるのだろうかと思います。私は反復の代わりにマージを行う方法を作りました。たぶん私はあなたの答えで解決できるように質問を言い換えることができます。おそらく、インポートする必要があるライブラリを追加することができます。 – frmo
良い点、@frmo。 itertoolsライブラリのimport文を追加しました。あなたのマージソリューションを共有できますか?私はそれがどのように機能するのか興味があります。あなたが提案した方法で解決できるように質問を言い換えることの意味を説明できますか? – 3novak