Python Dataframe: вычисление и отображение в столбце суммы значений на основе определенных идентификаторов в строках - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть следующий фрейм данных:

data = {'Project_ID': ['Project 1',  'Project 1', 'Project 1', 'Project 1', 'Project 1', 'Project 1', 'Project 1', 'Project 1'], 
     'participant_id': [1001, 1001, 1001, 1005, 1104, 1104, 1104, 1104], 
     'day':['Day_1', 'Day_2', 'Day_3', 'Day_1', 'Day_1', 'Day_2', 'Day_3', 'Day_4'], 
     'no_completed_tests': [5, 3, 4, 3, 2, 4, 3, 5]}

Я пытаюсь добавить столбец complete_tests_ (per_participant), который добавляет и отображает no_completed_tests ':

data = {'Project_ID': ['Project 1',  'Project 1', 'Project 1', 'Project 1', 'Project 1', 'Project 1', 'Project 1', 'Project 1'], 
     'participant_id': [1001, 1001, 1001, 1005, 1104, 1104, 1104, 1104], 
     'day':['Day_1', 'Day_2', 'Day_3', 'Day_1', 'Day_1', 'Day_2', 'Day_3', 'Day_4'], 
     'no_completed_tests': [5, 3, 4, 3, 2, 4, 3, 5],
     'completed_tests_(per_participant)': [12, 12, 12, 3, 14, 14, 14, 14]}

Для достижения того, что яхочу, чтобы я сделал следующее:

Data['completed_tests_(per_participant)'] = np.nan
pd.pivot_table(Data, index=[ 'participant_id'], values=['no_completed_tests'], aggfunc=np.sum)

Все, что я отобразил в completed_tests_(per_participant), это NaN

Я также пытался (без удовлетворительного результата):

Data ['completed_tests_(per_participant)']= Data.groupby(['participant_id']).sum()
Data ['completed_tests_(per_participant)']= Data.groupby(['participant_id']). ['no_completed_tests'].agg('sum')
Data = Data.groupby(['participant_id'])['no_completed_tests'].agg('sum')

Любые идеи / предложения, как мне достичь своей цели?Я все еще учусь программировать и пытаюсь применить знания из курса науки о данных, поэтому я, вероятно, делаю действительно глупые ошибки (я биолог).

1 Ответ

0 голосов
/ 14 декабря 2018

Я не думаю, что вам нужно поворачиваться здесь.Вы можете группировать и преобразовать:

df['completed_tests_(per_participant)'] = df.groupby('participant_id')['no_completed_tests'].transform('sum')

# display the column:
>>> df[['completed_tests_(per_participant)']]
   completed_tests_(per_participant)
0                                 12
1                                 12
2                                 12
3                                  3
4                                 14
5                                 14
6                                 14
7                                 14
...