Если необходимо выбрать первое значение в группе, необходимо использовать Series.iat
или Series.iloc
для выбора по позиции:
df1 = df.groupby('A', as_index = False).agg({'B':'mean', 'C': lambda x: x.iat[0]})
Другое решение заключается в использованииGroupBy.first
:
df1 = df.groupby('A', as_index = False).agg({'B':'mean', 'C': 'first'})
print (df1)
A B C
0 0 2 alpha
1 1 9 charlie
Можете ли вы объяснить, почему лямбда не работает?
Проблема для второй группы, есть индекс не 0
, а 2
, что вызывает ошибку, потому что x[0]
попробуйте выбрать по индексу с 0
и для второй группы его не существует:
df1 = df.groupby('A', as_index = False).agg({'B':'mean', 'C': lambda x: print (x[0])})
print (df1)
alpha <- return first value of first group only, because alpha has index 0
alpha
alpha
Так что если установленоиндекс 0
для первых значений групп, работающих с данными этого примера:
df = pd.DataFrame({'A': [0, 0, 1, 1],
'B': [1, 3, 8, 10],
'C': ['alpha', 'bravo', 'charlie', 'delta']}, index=[0,1,0,1])
print (df)
A B C
0 0 1 alpha <- index is 0
1 0 3 bravo
0 1 8 charlie <- index is 0
1 1 10 delta
df1 = df.groupby('A', as_index = False).agg({'B':'mean', 'C': lambda x: x[0]})
print (df1)
A B C
0 0 2 alpha
1 1 9 charlie