2016-09-08 1 views
1

Привет Надеюсь получить помощь, у меня есть два столбца Dataframe df as;pandas делить значение строки на агрегированную сумму с условием, установленным другой ячейкой

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

Мое намерение состоит в группе Source и разделить идентификатор соты на общей основе сгруппированных Источника и прикрепите к orginial dataframe поэтому новый столбец будет выглядеть;

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

попробовать это:

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 

, если вам это нужно, как новый столбец настойчивый вы можете сделать это, как @jezrael предложил в comment: классический

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

Хм, может быть, вы можете добавить путь без 'assign' :) – jezrael

+0

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

+0

@jezrael, да, спасибо! Я добавлю это к ответу ... – MaxU

Смежные вопросы