列上的python pandas操作

Ant*_*tin 4 python pandas

嗨,我想知道使用pandas在python中对列进行操作的最佳方法.

我有一个经典的数据库,我已经加载为数据帧,我经常要对每一行进行操作,如果标记为'A'的列中的值大于x,则将该值替换为'C'列减去列' d"

现在我做的事情就像

for i in len(df.index):
    if df.ix[i,'A'] > x :
        df.ix[i,'A'] = df.ix[i,'C'] - df.ix[i, 'D']
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种更简单的方法来执行这些操作,更重要的是最有效的方法,因为我有大型数据库

我曾尝试过没有for i循环,就像在R或Stata中一样,我被建议使用"a.any"或"a.all",但我没有在这里或在pandas docs中找到任何东西.

谢谢你提前.

Vik*_*kez 6

您可以使用带有DataFrame 的.loc.ix属性的布尔掩码.

mask = df['A'] > 2
df.ix[mask, 'A'] = df.ix[mask, 'C'] - df.ix[mask, 'D']
Run Code Online (Sandbox Code Playgroud)

如果你有很多分支的东西,你可以这样做:

def func(row):
    if row['A'] > 0:
        return row['B'] + row['C']
    elif row['B'] < 0:
        return row['D'] + row['A']
    else:
        return row['A']

df['A'] = df.apply(func, axis=1)
Run Code Online (Sandbox Code Playgroud)

apply 通常应该比for循环快得多.


Amr*_*ant 6

根据我最简单.

from random import randint, randrange, uniform
import pandas as pd
import numpy as np

df = pd.DataFrame({'a':randrange(0,10),'b':randrange(10,20),'c':np.random.randn(10)})

#If colC > 0,5, then ColC = ColB - Cola 
df['c'][df['c'] > 0.5] = df['b'] - df['a']
Run Code Online (Sandbox Code Playgroud)

测试,它的工作原理.

a   b   c
2  11 -0.576309
2  11 -0.578449
2  11 -1.085822
2  11  9.000000
2  11  9.000000
2  11 -1.081405
Run Code Online (Sandbox Code Playgroud)