在.str.find()中使用if语句

时间:2019-03-07 09:52:01

标签: python-3.x pandas if-statement

我想知道是否有一个if语句看起来像这样:

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

其中i等效于df["price"](df是熊猫数据帧)中的行条目,定义如下:

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

如何与上面的if语句一起使用df["price"].str.find(...)来按真实条件过滤数据?

我希望输出如下所示:

0  -1
1   0
2  -1

我一直在努力实现它,请协助。

4 个答案:

答案 0 :(得分:3)

通常最容易首先转换为最佳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)

然后可以将您的条件添加为列(或仅使用输出)。 Apply或map不太快,因此最好使用其他人建议的np.where或任何其他使用numpy进行比较的比较。例如:

df['criteria'] = -1 * (df.price <= 10).astype(int)  # quicker to not use map or apply
df.criteria 

答案 1 :(得分:1)

您可以使用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]

答案 2 :(得分:1)

只需使用lambda函数

df.price.apply(lambda x : 0 if int(x)>10 else -1)

答案 3 :(得分:1)

您可以使用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)