Pandas: увеличение значений в столбце на основе условия

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня есть следующий фрейм данных, и я хотел бы увеличить «значение» для всех строк, где значение находится между 2 и 7.

 import pandas as pd
df = pd.DataFrame({"value": range(1,11)})
df

# Output
    value
0   1
1   2
2   3
3   4
4   5
5   6
6   7
7   8
8   9
9   10
 

Я пробовал два способа сделать это, первая попытка завершилась ошибкой. Вторая попытка работает, но это не самое приятное решение. Кто-нибудь может предложить более приятное решение?

 # Attempt #1
df.loc[2 < df['value'] < 7, 'value']  = 1

# Ouput
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

# Attempt #2
def increment(value):
    if value > 2 and value < 7:
        return value   1
    return value
df["value"] = df["value"].apply(lambda x : increment(x))

# Output
    value
0   1
1   2
2   4
3   5
4   6
5   7
6   7
7   8
8   9
9   10
 

Ответ №1:

Попробуйте pandas.Series.between :

 df.loc[df['value'].between(2,7, inclusive=False), 'value']  = 1
 

Вывод:

    value
0      1
1      2
2      4
3      5
4      6
5      7
6      7
7      8
8      9
9     10
 

Ответ №2:

Вы можете сделать это таким образом:

 df[(2 < df.value) amp; (df.value < 7)]  = 1
 

или эквивалентно:

 df[(df.value.gt(2)) amp; (df.value.lt(7))]  = 1
 

Вывод в обоих случаях:

    value
0      1
1      2
2      4
3      5
4      6
5      7
6      7
7      8
8      9
9     10