#python #pandas
Вопрос:
Представьте себе фрейм данных, подобный этому:
import pandas as pd list ={'Security ID':['3e09ax', 'we9lkl', 'as42we','as5322', 'ot24tas', 'c34ci46a8'], 'Industry':['Airplanes', 'Airplanes', 'Oil', 'Oil', 'Housing', 'Trucking'], 'Amount outstanding':[33, 31, 39, 21, 29, 29]} df = pd.DataFrame(list)
»’
Конечная цель состоит в том, чтобы вернуть строки для каждой отрасли с наименьшей (минимальной) суммой задолженности в фрейм данных «Минимальное значение» для ежедневного отчета
по сути это так, но для каждой отрасли:
df[df['Amount outstanding'] == df['Amount outstanding'].min()]
Первый шаг-снова ввести уникальные значения для [отрасли] в список, а затем создать функцию цикла, которая делает это.
Не знаю точно, как это сделать. Этот фрейм данных на самом деле представляет собой 100 000 строк с 30 отраслями, которые меняются ежедневно.
Комментарии:
1.
df.groupby('Industry')['Amount outstanding'].min()
?2. Это не возвращает уникальный идентификатор (первый столбец). В конечном счете, этот отчет должен иметь ту же структуру фреймов данных, но с минимальными значениями для каждой отрасли.
3.
df[df['Amount outstanding'].eq(df.groupby('Industry')['Amount outstanding'].transform(min))]
4. Не могли бы вы, пожалуйста, указать ваши ожидаемые результаты? Например, в «нефтяной» отрасли есть два идентификатора безопасности. Какой из них (или оба?) должен быть в выводе?
5. @It_is_Chris это сработало идеально. Спасибо
Ответ №1:
IIUC, вы хотите groupby
и transform
:
output = df[df['Amount outstanding']==df.groupby('Industry')['Amount outstanding'].transform(min)] gt;gt;gt; output Security ID Industry Amount outstanding 1 we9lkl Airplanes 31 3 as5322 Oil 21 4 ot24tas Housing 29 5 c34ci46a8 Trucking 29
Ответ №2:
df['B']=df['Amount outstanding'] df.groupby('Industry', group_keys=False).apply(lambda x: x.loc[x.B.idxmin()])
это дает вам новый фрейм данных только с минимальным значением в столбце «Сумма задолженности». Если вы хотите, вы можете удалить сейчас столбец «B».
Ответ №3:
df.loc[df.groupby('Industry')['Amount outstanding'].idxmin()]