2つの列間のシーケンス関係に基づいてグループ化しようとしています。
d = {'df1':[10,20, 30, 60, 70, 40, 30, 70], 'df2':[20, 30, 40, 80, 70, 50, 90, 100]}
df = pd.DataFrame(data = d)
df
df1 df2
0 10 20
1 20 30
2 30 40
3 60 80
4 80 70
5 40 50
6 30 90
7 70 100
私は以下のような結果を期待しています:
より明確にするために:-df1とdf2には、シーケンスに基づいた関係があります。たとえば、10は20と直接関係にあり、10は30から20に間接関係にあります。また、10は40から20と30に間接関係にあります。追加の例として、80が70に直接関係し、 100から70までの間接的な関係。これは、残りの列値に対して機能します。
df1 | df2
-----|-------------------
0 10 | 20, 30, 40, 50, 90
1 20 | 30, 40, 50, 90
2 30 | 40, 50, 90
3 60 | 80, 70, 100
4 80 | 70, 100
5 40 | 50
6 70 | 100
以下のスクリプトを使用しようとしていますが、成功できませんでした。
(df.groupby('df1')
.agg({ 'df2' : ','.join})
.reset_index()
.reindex(columns=df.columns))
誰かがこの挑戦を手伝ってくれる?ここスタックオーバーフローで同様の解決策がある場合は、親切に私に知らせてください。
編集: 最初の答えは上記の例で完全に機能しますが、実行したいデータを試してみると、正しく機能しません。私の実際のデータは以下のようになります。
df1 df2
0 10 20
1 10 30
2 10 80
3 10 90
4 10 120
5 10 140
6 10 170
7 20 180
8 30 40
9 30 165
10 30 175
11 40 20
12 40 50
13 50 60
14 60 70
15 70 180
16 80 180
17 90 100
18 100 110
19 110 180
20 120 130
21 130 180
22 140 150
23 150 160
24 160 165
25 165 180
26 165 200
27 170 175
28 175 180
29 175 200
30 180 190
31 190 200
32 200 210
33 210 220
34 220 230
35 230 240
36 240 -
1
こんにちは、グループ化する列間の関係を明確にできますか?
—
eva-vw
こんにちはエヴァ、返信ありがとうございます。df1とdf2には、シーケンスに基づいた関係があります。たとえば、10は20と直接関係にあり、10は30から20に間接関係にあります。また、10は40から20と30に間接関係にあります。追加の例として、80が70に直接関係し、 100から70までの間接的な関係。これは、残りの列の値に対して機能します。
—
資本論
最初の行のシーケンスに90があるのはなぜですか?最初の列に50はないので、シーケンスはそこで終了するはずです。多分私は何かを誤解しました。
—
トレスコフ
@treskov返信ありがとうございます。インデックス番号6を見るとわかるように、30は90と直接関係にあります。10は30から20に間接関係にあることがわかります。つまり、10は90から30に間接関係にあります。これは一種の推移的であると言えますプロパティがそれだけではありません。
—
資本論