У меня есть большой dataframe, где каждому ключу присваивается одно значение. Однако у меня есть случаи, когда ключ имеет несколько значений, то они должны быть решены путем выбора максимального значенияPandas GroupBy aggegate только некоторые группы
пример (дата + тест является ключом):
df = pd.DataFrame({'date':['1/1/16','1/2/16','1/1/16','1/1/16'],'test':['A','A','B','B'],'Val':[3,4,1,4]})
grouped = df.groupby(['date','test'])
можно сделать:
agg = grouped.apply(lambda x: x[x['Val'] == x['Val'].max()])
Однако df составляет ~ 400 тыс. Записей, с отображением всего ~ 300 ключей на несколько значений. Я надеялся ускорить этот процесс, отделив от остальных ключи от остальных и запустив max на очень маленький набор, а затем рекомбинировав.
Я могу получить количество:
ct = grouped.count()
но как я использую его в качестве индекса в группе?
это не работает:
grouped[ct>1]
спасибо
[обновление 1]
Вот что я имею в виду.
keys = ['date','test']
ct = pd.DataFrame()
ct['Count'] = grouped.apply(lambda x: len(x))
ct.reset_index(inplace=True)
df = pd.merge(df,ct,on=keys,how='inner')
Теперь я могу разделить кадр данных на два на основе количества, равного 1 или больше. Все еще будет рад услышать предложение о том, как это сделать лучше.
является 'grouped ['Val']. Idxmax()' что вы после? – EdChum
Не совсем. Я придумал решение и обновил свой пост. Спасибо. – Arthur