2016-09-08 4 views
1

こんにちは、私は2つの列を持っています。データフレームdf;pandasは、他のセルで設定された条件を集計して行の値を割ります。

Source ID 
1  2 
2  3 
1  2 
1  2 
1  3 
3  1 

私の意図は、グループへの源であり、グループ化されたソースに基づいて、合計でID細胞を分割し、新しい列は次のようになりますので、orginialデータフレームにこれを付けます。

Source ID ID_new 
    1  2 2/9 
    2  3 3/3 
    1  2 2/9 
    1  2 2/9 
    1  3 3/9 
    3  1 3/1 

私はこれまで通りました。

df.groupby('Source ID')['ID'].sum() 

IDの合計を取得するには、次のどこに行くのかわかりません。

答えて

2

この試してください:あなたは@jezraelがcommentに提案されているようにあなたがそれを行うことができる新しい永続列としてそれを必要とする場合

In [79]: df.assign(ID_new=df.ID/df.groupby('Source').ID.transform('sum')) 
Out[79]: 
    Source ID ID_new 
0  1 2 0.222222 
1  2 3 1.000000 
2  1 2 0.222222 
3  1 2 0.222222 
4  1 3 0.333333 
5  3 1 1.000000 

を:

In [81]: df['ID_new'] = df.ID/df.groupby('Source').ID.transform('sum') 

In [82]: df 
Out[82]: 
    Source ID ID_new 
0  1 2 0.222222 
1  2 3 1.000000 
2  1 2 0.222222 
3  1 2 0.222222 
4  1 3 0.333333 
5  3 1 1.000000 
+0

うーん、多分あなたは古典を追加することができます(IDT):IDTransform( 'sum') ' – jezrael

+0

' df ['ID_new'] = df.ID/df.groupby('Source ')IDTransform(' sum ') ' – jezrael

+0

@jezrael、ありがとう!私は答えに追加します... – MaxU

関連する問題