2016-05-11 5 views
3

パンダとどのようにやりやすいのかを試してみましょう。あなたはACは、3つの共通の要素1, 2, 3を持って見たようパンダは複数の集計を作成します

Cat1 Cat2 
A  1 
A  2 
A  3 
B  1 
B  2 
C  1 
C  2 
C  3 
D  4 

の一つのようなデータを持つ2つの列を持っているとしましょう。 Bしかし、2つの要素1と2のみがあります。Dには1つの要素しかありません。4.

プログラミングによる方法でこの同じ結果が得られます。アイデアは、各グループが何らかの形で戻ってくるようにすることです。したがって、[A, C][1, 2, 3]の場合、[B][1, 2][D]の場合は、[4]となります。

私はプログラムがこれを行うように書かれていることを知っているので、何かがあるかどうかを判断しようとしています。

ありがとうございます!

答えて

0

あなたは可能性も:

df = df.set_index('Cat1', append=True).unstack().loc[:, 'Cat2'] 
df = pd.Series({col: tuple(values.dropna()) for col, values in df.items()}) 
df = df.groupby(df.values).apply(lambda x: list(x.index)) 

    Cat1 
(1.0, 2.0)   [B] 
(1.0, 2.0, 3.0) [A, C] 
(4.0,)    [D] 
3

あなたはこれを達成するために二回groupbyを使用することができます取得します。

df = df.groupby('Cat1')['Cat2'].apply(lambda x: tuple(set(x))).reset_index() 
df = df.groupby('Cat2')['Cat1'].apply(lambda x: tuple(set(x))).reset_index() 

パンダはgroupbyを行うためにハッシュ可能する要素を必要とするので、私はtupleを使用しています。上記のコードでは、(1, 2, 3)(1, 1, 2, 3)を区別していません。この区別をしたい場合はsetsortedに置き換えてください。

結果出力:

 Cat2 Cat1 
0  (1, 2) (B,) 
1 (1, 2, 3) (A, C) 
2  (4,) (D,) 
関連する問題