Панды групповой и агг операции выбранных столбцов и строки - PullRequest
0 голосов
/ 22 октября 2019

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

enter image description here

Я не уверен, возможно ли использовать панды для вывода, как показано ниже:

Разница = Ответ [df.Time == «pre»] - Response.min для каждой группы

enter image description here

1 Ответ

1 голос
/ 22 октября 2019

Если pre всегда первый для групп и значения в выходных данных должны повторяться:

df['diff'] = df.groupby('IDs')['Response'].transform(lambda x: (x.iat[0] - x).min())

Только для первого значения для групп возможно заменить значения пустыми строками, но получить смешанные значения - числовые сстроки, поэтому следующая обработка должна быть проблемой:

df['diff'] = df['diff'].mask(df['diff'].duplicated(), '')

РЕДАКТИРОВАТЬ:

df = pd.DataFrame({
         'Response':[2,5,0.4,2,1,4],
         'Time':[7,'pre',9,4,2,'pre'],
         'IDs':list('aaabbb')
})
#print (df)

d = df[df.Time=="pre"].set_index('IDs')['Response'].to_dict()
print (d)
{'a': 5.0, 'b': 4.0}

df['diff'] = df.groupby('IDs')['Response'].transform(lambda x: d[x.name] - x.min())
print (df)
   Response Time IDs  diff
0       2.0    7   a   4.6
1       5.0  pre   a   4.6
2       0.4    9   a   4.6
3       2.0    4   b   3.0
4       1.0    2   b   3.0
5       4.0  pre   b   3.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...