Python 有条件地更改每个索引和列中数据帧的值的最快方法是什么?

Python 有条件地更改每个索引和列中数据帧的值的最快方法是什么?,python,python-3.x,pandas,numpy,Python,Python 3.x,Pandas,Numpy,有没有一种方法可以在不使用循环的情况下,将验证条件(包括其自身值)的数据帧的每个元素减少常量 例如,每个小于2的单元格看到其值减少1 非常感谢。我喜欢做这个。 下面是一个使用您的示例的低效循环 #Example using loop for val in df['column']: if(val<2): val = val - 1 #使用循环的示例 对于df[“列”]中的val: 如果(val我不确定这是否是最快的,但您可以使用.apply函数: i

有没有一种方法可以在不使用循环的情况下,将验证条件(包括其自身值)的数据帧的每个元素减少常量

例如,每个小于2的单元格看到其值减少1

非常感谢。

我喜欢做这个。 下面是一个使用您的示例的低效循环

 #Example using loop
 for val in df['column']:
      if(val<2):
           val = val - 1
#使用循环的示例
对于df[“列”]中的val:

如果(val我不确定这是否是最快的,但您可以使用.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。

更像(来自Willie的数据)


df-((df在本例中,我将使用NumPy库中的
np.where
方法。
该方法使用以下逻辑:
np.其中(,)

例如:

# 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 |`
#导入所需的模块
作为pd进口熊猫
将numpy作为np导入
#创建exmaple数据帧
df=pd.DataFrame({'A':[3,1,5,0.5,2,0.2]})
|A|
|-----|
|   3 |
|   1 |
|   5 |
| 0.5 |
|   2 |
| 0.2 |
#使用条件语句应用np.where方法
df['A']=np.where(df.A<2,df.A-1,df.A)
|A|
|------|
|    3 |
|  0.0 |
|    5 |
| -0.5 |
|    2 |
| -0.8 |`

我相信有一些方法,但是,您想向我们展示一些示例数据吗?
。应用
被认为是缓慢的。您应该始终更喜欢在熊猫数据帧上进行内置矢量化操作。这是一个方便的“最后手段”功能
df-((df<2)*2)
Out[727]: 
    x  y  z
0  -1  2  3
1   2  2  2
2   4  4  4
# 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 |`