2017-12-06 9 views
1

インデックスに基づいてdf行を反復処理する必要があります。私は列p1の最大値を見つけ、出力データフレームに(最大p1と一緒に)それを、列p2と同じにする必要があります。私の行インデックスの各範囲(sub_1_ica_1 ---> sub_1_ica_n)には、1つ1つと2つしかなくてはならず、残りに0を入れる必要があります。だからこそ私は範囲で操作範囲を行う必要があります。インデックス値でデータフレーム行を反復処理し、最大値を見つける

enter image description here

私は、インデックス名を分割し、行を反復するために使用される各被験者のためのカウンターを作ってみましたが、私は間違った方法でだと感じています!

from collections import Counter 
    a = df.id.tolist() 
    indlist = [] 
    for x in a: 
    i = x.split('_') 
    b = int(i[1]) 
    indlist.insert(-1,b) 
    c=Counter(indlist) 
    keyInd = c.keys() 

EDIT:Jerazelの例によると、私の希望する出力はこのようになります。 まず私は1と2に新しいDFに翻訳されるP1およびP2の列の最大を見つけ、そして残りのフィールドは、私はあなたにもあれば、maxnumpy.argmaxが必要だと思う

enter image description here

+0

出力で 'p01'、' p0n'は何ですか? – jezrael

+0

列p0私は最大値を計算しません。値を取得します。 – Ben

答えて

1

ゼロになります列名はidxmaxを使う必要があります。

idx = ['sub_1_ICA_0','sub_1_ICA_1','sub_1_ICA_2','sub_2_ICA_0','sub_2_ICA_1','sub_2_ICA_2'] 
df = pd.DataFrame({'p0':[7,8,9,4,2,3], 
        'p1':[1,3,5,7,1,0], 
        'p2':[5,9,6,1,2,4]}, index=idx) 

print (df) 

cols = ['p0','p1','p2'] 
df['a'] = df[cols].values.argmax(axis=1) 
df['b'] = df[cols].max(axis=1) 
df['c'] = df[cols].idxmax(axis=1) 
print (df) 
      p0 p1 p2 a b c 
sub_1_ICA_0 7 1 5 0 7 p0 
sub_1_ICA_1 8 3 9 2 9 p2 
sub_1_ICA_2 9 5 6 0 9 p0 
sub_2_ICA_0 4 7 1 1 7 p1 
sub_2_ICA_1 2 1 2 0 2 p0 
sub_2_ICA_2 3 0 4 2 4 p2 
+0

ここで、列全体の最大値が計算されますか? – Ben

+0

ほとんどの作業をしましたが、私の希望する出力は少し異なります。最初のものがmaxの位置に応じて0,1,2を示し、2番目のカラムが最大値の – Ben

+0

を編集してください。 – Ben

関連する問題