Скажем, у меня есть фрейм данных с 2 столбцами, 1-й столбец содержит такие действия, как работа, дом, сон и т. д., А 2-й столбец - продолжительность каждого действия.
во время итерации по строкам я хочу узнать продолжительность последнего действия "сна" во время текущего действия, в котором я нахожусь.
Есть простой способ сделать это?
мои данные:
duration = np.random.randint(20, size = 30)
activities = ['work', 'home', 'sleep', 'home','work', 'sleep','work', 'home','sleep', 'home','work', 'sleep','work', 'home','work', 'sleep','work', 'home','work', 'sleep','work', 'home','work', 'sleep','work', 'home','work', 'home', 'work', 'sleep']
activity_df = pd.DataFrame({'activities':activities, 'duration':duration})





Я считаю, что нужен первый фильтр по boolean indexing и последний выбор последнего значения по iloc:
print (activity_df.loc[activity_df['activities'] == 'sleep', 'duration'].iloc[-1])
Или используйте where для создания NaN по условию и последней прямой замены значений на ffill:
activity_df['new'] = activity_df['duration'].where(activity_df['activities']=='sleep').ffill()
print (activity_df)
activities duration new
0 work 1 NaN
1 home 5 NaN
2 sleep 11 11.0
3 home 8 11.0
4 work 11 11.0
5 sleep 8 8.0
6 work 9 8.0
7 home 13 8.0
8 sleep 19 19.0
9 home 6 19.0
10 work 19 19.0
11 sleep 16 16.0
12 work 16 16.0
13 home 1 16.0
14 work 5 16.0
15 sleep 10 10.0
16 work 1 10.0
17 home 5 10.0
18 work 0 10.0
19 sleep 4 4.0
20 work 12 4.0
21 home 4 4.0
22 work 10 4.0
23 sleep 6 6.0
24 work 17 6.0
25 home 14 6.0
26 work 7 6.0
27 home 5 6.0
28 work 10 6.0
29 sleep 8 8.0
спасибо, я думаю, что смогу завершить свою работу с этим
ты бог переполнения стека
@MarvieDemit - Думаю, нет, есть много лучших программистов, но, возможно, у них нет времени на ответ.
Я уверен, что есть, но это только мое личное впечатление, что вы всего в нескольких секундах от вас отвечаете на мои вопросы, в основном глупый, но важный вопрос для меня как нового программиста на Python! Я только что увидел, что вы из Братиславы! В настоящее время я живу в Вене из Филиппин и хочу побаловать вас пивом xD
@MarvieDemit - Большое спасибо, будет приятно :) У меня в профиле есть электронная почта, так что если очень захочется со мной встретиться, будет супер. :)
Я буду писать вам по почте в течение дня: D напишу позже! Еще раз спасибо!
Вы также можете попробовать это, это несколько похоже на ответ Джезраэля.
activity_df[activity_df['activities'] == 'sleep']['duration'].iloc[-1]
За исключением того, что цепное индексирование явно не рекомендуется в документации. loc более понятен и менее подвержен ошибкам.
Согласовано. Более эффективно использовать .loc
Какой ожидаемый результат?