2017-12-06 2 views
0

私はpandasと他のscipyライブラリで緑色なので、これを行う方法がわかりません。私は2つの要素のタプルのリストを持っていると私は同じタプルが発見された回数、または逆の対応、したがって、ソートカウントしています:私は基本的にこれを生成DataFrameを作成しようとしていますタプルのカウンタからDataFrameを作成する方法

In [24]: tuples 
Out[24]: 
[(1, 2), 
(1, 3), 
(1, 4), 
(2, 3), 
(2, 4), 
(3, 4), 
(2, 1), 
(3, 1), 
(4, 1), 
(3, 2), 
(4, 2), 
(4, 3)] 

In [30]: count = Counter([tuple(sorted(t)) for t in tuples]) 

In [31]: count 
Out[31]: Counter({(1, 2): 2, (1, 3): 2, (1, 4): 2, (2, 3): 2, (2, 4): 2, (3, 4): 2}) 

を出力:

1 2 3 4 
1 0 2 2 2 
2 2 0 2 2 
3 2 2 0 2 
4 2 2 2 0 
+0

必要がありますか?あなたは何を達成しようとしていますか? – MaxU

+0

@MaxUそれは持っている操作のための 'DataFrame'の中にデータを持つのが便利です。例えば、与えられた 't'が他のものとペアリングされた回数を知る必要がある場合、私は' df [t] 'だけできます。それを「カウンター」に入れてもインデックス作成はできません。それは単なる一例であり、他にもたくさんあることがあります。 – dabadaba

答えて

2

少し違うアプローチは?

最初のタプルのSortedListのからDFを作成してみましょう:

In [272]: df = pd.DataFrame(np.sort(np.array(tuples), axis=1), columns=['c1','c2']) 

In [273]: df 
Out[273]: 
    c1 c2 
0 1 2 
1 1 3 
2 1 4 
3 2 3 
4 2 4 
5 3 4 
6 1 2 
7 1 3 
8 1 4 
9 2 3 
10 2 4 
11 3 4 

今、私たちはパンダの技術を使用してペアを数えることができます。

マルチインデックスDF内のデータへのアクセス
In [274]: res = df.groupby(['c1','c2']).size() 

In [275]: res 
Out[275]: 
c1 c2 
1 2  2 
    3  2 
    4  2 
2 3  2 
    4  2 
3 4  2 
dtype: int64 

In [277]: res.loc[(1,2)] 
Out[277]: 2 

In [278]: res.loc[(2,4)] 
Out[278]: 2 

結果のDFをアンスタッキングすることもできます。

In [279]: res.unstack(fill_value=0) 
Out[279]: 
c2 2 3 4 
c1 
1 2 2 2 
2 0 2 2 
3 0 0 2 

またはas proposed by @Dark:あなたはexcatlyそのように設定された/所望のデータを結果

In [280]: pd.Series(count).unstack(fill_value=0) 
Out[280]: 
    2 3 4 
1 2 2 2 
2 0 2 2 
3 0 0 2 
+0

私が言及したように、私はパンダと緑の一種です。あなたの答えを簡単に説明できますか? – dabadaba

+1

すでにカウンタ変数があるので、 'pd.Series(count).unstack(fill_value = 0)' – Dark

+0

@Dark、良い点 - ありがとう! :) – MaxU

関連する問題