Возвращение местоположения первого значения в местоположении фрейма данных, которое соответствует условию в фрейме данных pandas

У меня есть этот фрейм данных:

import pandas as pd
df = pd.DataFrame({'time': ['20:00', '23:00', '21:00', '21:00', '22:00', '22:00', '20:30'],
                   'traf': [100, 200, 25, 300, 100, 200, 100],
                   'num': [5, 3, 5, 6, 41, 34, 10]})
df = df.set_index(['time']).sort_index()
print(df)

        traf  num
time            
20:00   100    5
20:30   100   10
21:00    25    5
21:00   300    6
22:00   100   41
22:00   200   34
23:00   200    3

Я пытаюсь написать функцию для агрегирования моего фрейма данных по значениям столбца df['traf'], а затем сообщать о первом значении в столбце df['num'], которое соответствует условию.

вот пример того, что я делаю, но я не уверен, что это правильно. Кроме того, поскольку я имею дело с кадром данных очень большого размера, я не уверен, что этот способ достаточно эффективен.

filter = df.groupby(["time"])['traf'].sum() >= 225
df.where(filter, inplace=True)
print(df)

         traf   num
time              
20:00    NaN   NaN
20:30    NaN   NaN
21:00   25.0   5.0
21:00  300.0   6.0
22:00  100.0  41.0
22:00  200.0  34.0
23:00    NaN   NaN

Итак, исходя из приведенного выше результата, я хочу, чтобы мой вывод был первым значением в столбце num, которое не является NaN в этом случае 5.0.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используя transform с sum, затем снова groupby, используя first

s=df.groupby(["time"])['traf'].transform('sum').gt(255)
df[s].groupby('time').num.first()
Out[207]: 
time
21:00     5
22:00    41
Name: num, dtype: int64

Или

df.loc[s,'num'].iloc[0]
Out[211]: 5

Другие вопросы по теме