Используйте оператор if в .str.find () - PullRequest
0 голосов
/ 07 марта 2019

Я хотел бы знать, если у меня есть выражение if, которое выглядит примерно так:

if int(i) > 10:
    return 0
else:
    return -1

, где i эквивалентно записи строки в df["price"] (df - кадр данных pandas), определенной следующим образом:

import pandas as pd
df = pd.DataFrame(columns=["price", "Number"], data=[["10", "07367"], ["20", "08356"], ["9", "07745"]])

как я могу использовать df["price"].str.find(...) вместе с приведенным выше оператором if для фильтрации данных по истинному условию?

Я бы хотел, чтобы вывод выглядел следующим образом:

0  -1
1   0
2  -1

Я боролся с тем, как это реализовать, пожалуйста, помогите.

Ответы [ 4 ]

3 голосов
/ 07 марта 2019

Как правило, его проще всего сначала преобразовать в оптимальный dtypes.Таким образом, все операции будут выполняться быстрее - конечно, это зависит от вашего приложения.Но если вещи являются числами, пусть они будут числами (явные> неявные).

import pandas as pd

df = pd.DataFrame(columns=["price", "Number"], data=[["10", "07367"], ["20", "08356"], ["9", "07745"]])
df['price'] = df.price.astype(int)  # or float 
df['number'] = df.number.astype(int)

Затем вы можете добавить свои критерии в виде столбца (или просто использовать выходные данные).Применить или карта не так быстро, поэтому лучше использовать np.where, предложенный другими, или любое другое сравнение, которое будет использовать numpy под капотом.Например:

df['criteria'] = -1 * (df.price <= 10).astype(int)  # quicker to not use map or apply
df.criteria 
1 голос
/ 07 марта 2019

просто вы можете использовать лямбда-функции

df.price.apply(lambda x : 0 if int(x)>10 else -1)
1 голос
/ 07 марта 2019

Вы можете использовать np.where :

df['price'] =df['price'].astype(int)
df['output'] = np.where(df['price']>10, 0, -1)
df

   price    Number  output
0   10     07367     -1
1   20     08356     0
2   9      07745    -1

Синтаксис: np.where(condition, valueIfTrue, valueIfFalse)

1 голос
/ 07 марта 2019

Вы можете использовать gt + map :

import pandas as pd

df = pd.DataFrame(columns=["price", "Number"], data=[["10", "07367"], ["20", "08356"], ["9", "07745"]])
result = df.price.astype(int).gt(10).map({False: -1, True: 0})
print(result)

выход

0   -1
1    0
2   -1
Name: price, dtype: int64

Или, если хотите, вы можете использовать np.where , как упомянуто @coldspeed в комментариях.

import numpy as np
import pandas as pd

df = pd.DataFrame(columns=["price", "Number"], data=[["10", "07367"], ["20", "08356"], ["9", "07745"]])
result = np.where(df.price.astype(int) > 10, 0, -1)
print(result)

выход

[-1  0 -1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...