#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