2017-04-20 6 views
1

私は、ID列といくつかの機能列を持つDataFrameを持っています。列の値ごとに固有IDがいくつあるかについての説明を見たいと思います。「移調」パンダシリーズ

次のコードは動作しますが、列はパーセンタイルあるデータフレーム、MAX、MINへ.describe()シリーズの結果を転置to_frame().unstack().unstack()ラインよりも良い方法は...

def unique_ids(df): 
    rows = [] 
    for col in sorted(c for c in df.columns if c != id_col): 
     v = df.groupby(col)[id_col].nunique().describe() 
     v = v.to_frame().unstack().unstack() # Transpose 
     v.index = [col] 
     rows.append(v) 

    return pd.concat(rows) 

答えて

3

それが思われる場合、私は疑問に思います

v = v.to_frame().unstack().unstack() 

v = v.to_frame().T 
に:あなたは、変更必要

またはtranspose最終DataFrameが可能であり、またcolによってrenameを添加する:

df = pd.DataFrame({'ID':[1,1,3], 
        'E':[4,5,5], 
        'C':[7,8,9]}) 

print (df) 
    C E ID 
0 7 4 1 
1 8 5 1 
2 9 5 3 

def unique_ids(df): 
    rows = [] 
    id_col = 'ID' 
    for col in sorted(c for c in df.columns if c != id_col): 
     v = df.groupby(col)[id_col].nunique().describe().rename(col) 
     rows.append(v) 
    return pd.concat(rows, axis=1).T 

print (unique_ids(df)) 
    count mean  std min 25% 50% 75% max 
C 3.0 1.0 0.000000 1.0 1.00 1.0 1.00 1.0 
E 2.0 1.5 0.707107 1.0 1.25 1.5 1.75 2.0