嗨,我想知道使用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中找到任何东西.
谢谢你提前.
您可以使用带有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循环快得多.
根据我最简单.
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)
| 归档时间: |
|
| 查看次数: |
19623 次 |
| 最近记录: |