是否有一种方法可以将数据框的每个元素减少一个常数,从而无需使用循环就可以验证包含其自身值的条件?
例如,每个<2的单元格的值都会减少1。
非常感谢您。
答案 0 :(得分:3)
我喜欢做这种蒙版。 这是使用您的示例的低效率循环
#Example using loop
for val in df['column']:
if(val<2):
val = val - 1
以下代码给出的结果相同,但是由于它不使用循环,因此通常会更快。
# Same effect using masks
mask = (df['column'] < 2) #Find entries that are less than 2.
df.loc[mask,'column'] = df.loc[mask,'column'] - 1 #Subtract 1.
答案 1 :(得分:0)
我不确定这是否最快,但是您可以使用.apply函数:
import pandas as pd
df = pd.DataFrame(data=np.array([[1,2,3], [2,2,2], [4,4,4]]),
columns=['x', 'y', 'z'])
def conditional_add(x):
if x > 2:
return x + 2
else:
return x
df['x'] = df['x'].apply(conditional_add)
将x的最后一行加2。
答案 2 :(得分:0)
更像(来自Willie的数据)
df-((df<2)*2)
Out[727]:
x y z
0 -1 2 3
1 2 2 2
2 4 4 4
答案 3 :(得分:0)
在这种情况下,我将使用NumPy库中的np.where
方法。
该方法使用以下逻辑:
np.where(<condition>, <value if true>, <value if false>)
示例:
# import modules which are needed
import pandas as pd
import numpy as np
# create exmaple dataframe
df = pd.DataFrame({'A':[3,1,5,0.5,2,0.2]})
| A |
|-----|
| 3 |
| 1 |
| 5 |
| 0.5 |
| 2 |
| 0.2 |
# apply the np.where method with conditional statement
df['A'] = np.where(df.A < 2, df.A - 1, df.A)
| A |
|------|
| 3 |
| 0.0 |
| 5 |
| -0.5 |
| 2 |
| -0.8 |`