我想知道是否有一个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
我一直在努力实现它,请协助。
答案 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)
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)