Учитывая следующий DataFrame в пандах:
| среднее_время_1 | среднее_время_2 | среднее_время_3 |
|---|---|---|
| 1200 | 34 | 1 |
| 90 | 45 | 3600 |
| 0 | 4 | 1 |
| 0 | 4 | 50 |
| 80 | 4 | 60 |
| 82 | 40 | 65 |
Я хочу получить новый DataFrame из предыдущего, чтобы он присваивал следующий код каждой строке, если любой из трех столбцов visit_time превышает следующие значения:
Применив функцию, мы получим следующий DataFrame.
| среднее_время_1 | среднее_время_2 | среднее_время_3 | коды |
|---|---|---|---|
| 1200 | 34 | 1 | 4 |
| 90 | 45 | 3600 | 4 |
| 0 | 4 | 1 | 1 |
| 0 | 4 | 50 | 2 |
| 80 | 4 | 60 | 2 |
| 82 | 40 | 65 | 3 |
Спасибо за ваш ответ заранее.






Вы можете попробовать np.select, обратите внимание, что вы должны поставить условие более высокого приоритета впереди.
df['codes'] = np.select(
[df.lt(5).all(1), df.gt(1000).any(1),
df.apply(lambda col: col.between(5, 100)).all(1),
df.apply(lambda col: col.between(5, 100)).any(1)],
[1, 4, 3, 2],
default=0
)
print(df)
avg_time_1 avg_time_2 avg_time_3 codes
0 1200 34 1 4
1 90 45 3600 4
2 0 4 1 1
3 0 4 50 2
4 80 4 60 2
5 82 40 65 3
В вашем коде есть проблемы, если у меня есть дополнительные столбцы в DataFrame, как я могу исправить это, чтобы оно применялось только к столбцам avg_time?
@Carola Измените df в коде на df.filter('avg_time').
что ты уже испробовал? Вы можете показать код, который вы написали, чтобы получить полезные предложения.