у меня есть pd.DataFrame с четырьмя столбцами
df = pd.DataFrame({'id':[1,1,1,1,1,2,2,2,2]
, 'A':['H','H','E','E','H','E','E','H','H']
, 'B':[4,5,2,7,6,1,3,1,0]
, 'C':['M','D','M','D','M','M','M','D','D']})
id A B C
0 1 H 4 M
1 1 H 5 D
2 1 E 2 M
3 1 E 7 D
4 1 H 6 M
5 2 E 1 M
6 2 E 3 M
7 2 H 1 D
8 2 H 0 D
Я хотел бы сгруппировать по идентификатору и получить значение B для n-го (скажем, второго) появления A = ' H 'для каждого идентификатора в agg_B1 и значение B для n-го (скажем, первого) появления C =' M ':
desired output:
id agg_B1 agg_B2
0 1 5 4
1 2 0 1
desired_output = df.groupby('id').agg(
agg_B1= ('B',lambda x:x[df.loc[x.index].loc[df.A== 'H'][1]])
, agg_B2= ('B',lambda x:x[df.loc[x.index].loc[df.C== 'M'][0]])
).reset_index()
TypeError: Indexing a Series with DataFrame is not supported, use the appropriate DataFrame column
Очевидно, я делаю что-то не так с индексацией.
Изменить: если возможно, я хотел бы использовать агрегат с лямбда-функцией, потому что есть несколько агрегированных выходов других типов, которые я хотел бы извлечь одновременно.