2017-07-05 7 views
1

私はdx1-dx99列から99列のデータフレームをLOSとして持っています。 dxi列にはカテゴリコードが含まれており、順序はありません。コードは、行の任意の列で発生する可能性があります。コードは、列に繰り返すことができますが、彼らは行で繰り返すことはしません。pandasデータフレームのセル値にgroupbyを実行する

dx1 dx2 dx3 . dx99 los 
E10 I12 0 N18 R18  12 
E10 I12 I31 E44 N17  7 
E10 I12 N17 T86 0  5 
I12 E10 N18 A04   1 
E10 I12 B10 N18 Z99  4 
E10 N18 Z76    1 
E10 N18 Z99 N25 E78  8 

私は、データフレーム内の各コードについてLOSの平均値を計算します。私が見つけたのは、複数の列にgroupby()関数を適用できるということでした。しかし、それは私に望ましい結果をもたらしません。私はこの形式になり必要があります。

Codes mean-LOS 
E10  5.42  
I12  7.6 
N18  5.2 
. 
. 
etc. 

答えて

1

あなたがgroupbyと集計meanとリシェイプためDataFrame.meltを使用することができます。

df = df.melt('los', value_name='Codes') 
#older version of pandas < 0.20.0 
#df = pd.melt(df, 'los', value_name='Codes') 
df = df.groupby('Codes', as_index=False)['los'].mean() 
print (df) 
    Codes  los 
0  0 8.500000 
1 A04 1.000000 
2 B10 4.000000 
3 E10 5.428571 
4 E44 7.000000 
5 E78 8.000000 
6 I12 5.800000 
7 I31 7.000000 
8 N17 6.000000 
9 N18 5.200000 
10 N25 8.000000 
11 R18 12.000000 
12 T86 5.000000 
13 Z76 1.000000 
14 Z99 6.000000 

列の名前を変更が必要な場合:

df = df.melt('los', value_name='Codes') 
df = df.groupby('Codes')['los'].mean().reset_index(name='mean-LOS') 
print (df) 
    Codes mean-LOS 
0  0 8.500000 
1 A04 1.000000 
2 B10 4.000000 
3 E10 5.428571 
4 E44 7.000000 
5 E78 8.000000 
6 I12 5.800000 
7 I31 7.000000 
8 N17 6.000000 
9 N18 5.200000 
10 N25 8.000000 
11 R18 12.000000 
12 T86 5.000000 
13 Z76 1.000000 
14 Z99 6.000000 
+0

私はエラーデータフレームを取得していますオブジェクトには属性 'melt'がありません。これはパンダの新しいバージョンにはこの方法があるのでしょうか?私は '0.17.1'を持っています。 – Sanoj

+0

正確に 'df.melt'は' 0.20.0'バージョンで実装されています。 – jezrael

関連する問題