2017-02-10 13 views
1

私は約52の列のパンダのデータフレームを持っています。私は各列のユニークなコンテンツを取得したい。 列名がcol1、col2 ... col52であるとしましょう。私はこれは私がすべての50個の列のために行う必要がある場合は痛みを伴うことになるだろうfor in loopパンダのフレームからユニークな値を印刷する

df.col1.unique() 

を使用することができ、カラム1のユニークなコンテンツを取得するには 。このようなことをしたいと思っていますが、うまくいきません。

for i in df.columns: 
    print 'df.'+i+'.unque()' 

答えて

2

だけprint値をしたい場合は最も単純である:

apply
for col in df: 
    print (col, df[col].unique()) 

A [1 2 3] 
B [4 6] 
C [9] 
D [1 5] 
E [5 3] 
F [7 4] 

使用unique

df1 = df.apply(lambda x: pd.Series(x.unique())) 

サンプル:

df = pd.DataFrame({'A':[1,2,3], 
        'B':[4,4,6], 
        'C':[9,9,9], 
        'D':[1,1,5], 
        'E':[5,3,3], 
        'F':[7,4,7]}) 

print (df) 
    A B C D E F 
0 1 4 9 1 5 7 
1 2 4 9 1 3 4 
2 3 6 9 5 3 7 

df1 = df.apply(lambda x: pd.Series(x.unique())) 
print (df1) 
    A B C D E F 
0 1 4.0 9.0 1.0 5.0 7.0 
1 2 6.0 NaN 5.0 3.0 4.0 
2 3 NaN NaN NaN NaN NaN 

別の解決策が、少し異なる出力を持つとdrop_duplicates

df1 = df.apply(lambda x: x.drop_duplicates()) 
print (df1) 
    A B C D E F 
0 1 4.0 9.0 1.0 5.0 7.0 
1 2 NaN NaN NaN 3.0 4.0 
2 3 6.0 NaN 5.0 NaN NaN 
2

pd.Series([np.unique(x) for _, x in df.iteritems()], df.columns) 

col1 [4, 66, 85, 28, 88, 30, 38, 50, 25, 58] 
col2  [58, 89, 48, 3, 60, 71, 23, 7, 50, 94] 
col3  [89, 38, 32, 27, 99, 2, 29, 68, 1, 67] 
col4  [15, 6, 60, 12, 11, 53, 2, 87, 10, 54] 
col5  [75, 11, 97, 66, 19, 10, 22, 8, 20, 1] 
dtype: object 
データフレーム df

df = pd.DataFrame(
    np.random.randint(1, 100, (10, 5)), 
    columns=['col{}'.format(i) for i in range(1, 6)] 
) 

print(df) 

    col1 col2 col3 col4 col5 
0  4 58 89 15 75 
1 66 89 38  6 11 
2 85 48 32 60 97 
3 28  3 27 12 66 
4 88 60 99 11 19 
5 30 71  2 53 10 
6 38 23 29  2 22 
7 50  7 68 87  8 
8 25 50  1 10 20 
9 58 94 67 54  1 

オプション1
pd.Seriesnp.uniqueの組み合わせを使用して考えてみましょう、とリストの内包

オプション2
使用groupby + np.unique

df.groupby(axis=1, level=0).apply(np.unique) 

col1 [4, 25, 28, 30, 38, 50, 58, 66, 85, 88] 
col2  [3, 7, 23, 48, 50, 58, 60, 71, 89, 94] 
col3  [1, 2, 27, 29, 32, 38, 67, 68, 89, 99] 
col4  [2, 6, 10, 11, 12, 15, 53, 54, 60, 87] 
col5  [1, 8, 10, 11, 19, 20, 22, 66, 75, 97] 
dtype: object 
+0

感謝。あなたのソリューションは素晴らしいものです。私は1つだけを選択できます。 – moron