2017-09-18 4 views
1

私は基本的に以下のように見えますかなり大きなデータフレームを持っている:巨大なパンダのデータフレームで順列を見つけますか?

df_apple = pd.DataFrame({'_id': ['A','B' ,'C'], 'apple': ['1', '0', '1'], 'orange': ['1', '1', '0'], 'kiwi': ['1', '0', '1']}) 

私は機能と_idあたりバイナリclassifcationの列を持っています。私はappleorange、およびkiwiの順列/組み合わせのすべての個体(_id)の頻度と総数を見つけようとしています。これはこの質問hereに似ています。

このおもちゃ-場合

、組み合わせappleorange、およびkiwiapple == 0 & orange==1 & kiwi==0が全くないように見える組み合わせながら、1時間(_id == A)が表示されます。

私は、次の防災情報が含まれている必要があり、出力を作成しようとしています:

df_combination = pd.DataFrame({'_id': ['Apple, Orange and Kiwi','Only Orange' ,'Apple and Kiwi but not Orang'], 'Count': ['1', '1', '1']}) 

すなわち組み合わせが見つかり、どのように頻繁にされた私に言ってデータフレーム、。私はまったく出現しない組み合わせには興味がありません。

ただし、私のデータフレームは約300列です。私はそれらを先験的に指定することはできず、これを数学的に解決するには年月がかかるだろう。どのように良い方法でこれを解決するための任意のアイデア?

+1

可能な複製を[同じ列内のすべての可能な順列の列パンダDATAFRAME](https://stackoverflow.com/questions/35518308/all-possible-permutations -columns-pandas-data-within-the-same-column) –

+1

あなたは300の大きさを知っていますか?ありますか? –

+1

[関連ルール](https://en.wikipedia.org/wiki/Association_rule_learning)を構築しようとしていますか? – ayhan

答えて

1

を参照してくださいこれはあなたのニーズに合う場合:の

import pandas as pd 

df_apple = pd.DataFrame({'_id': ['A', 'B', 'C'], 
         'apple': ['1', '0', '1'], 
         'orange': ['1', '1', '0'], 
         'kiwi': ['1', '0', '1']}) 

df_counts = df_apple.groupby(by=tuple(df_apple.columns[1:])).count() 
idx_str = [[df_counts.index.names[i] for i, v in enumerate(idx) if v != '0'] 
      for idx in df_counts.index] 
idx_str = [" and ".join((", ".join(s[:-1]), s[-1])) if len(s) > 1 else s[0] for s in idx_str] 
df_counts.index = idx_str 
df_counts.columns = ["count"] 
df_counts = df_counts.T 

print(df_counts) 
>>>  orange apple and kiwi apple, kiwi and orange 
    count  1    1      1 
+0

これは既に非常に便利ですが、私には望ましい出力が得られません。私はすべてのサブセットと、それらが自動的に見つかる頻度を示す表を作成できますか? – Rachel

+0

@Rachel私は答えを編集しました。 – jdehesa

+0

ありがとうございます!それは完璧と思われる! – Rachel

関連する問題