python pandas对列的操作

2024-05-23 19:32:03 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我想知道使用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']

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

我试过不使用for I循环,就像在R或Stata中一样,我被建议使用“a.any”或“a.all”,但我在这里或熊猫文档中都没有找到任何东西。

提前谢谢。


Tags: 数据方法in标记数据库pandasdffor
3条回答

我觉得最简单。

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']

经过测试,它是有效的。

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

您可以将布尔掩码与数据帧的.loc.ix属性一起使用。

mask = df['A'] > 2
df.ix[mask, 'A'] = df.ix[mask, 'C'] - df.ix[mask, 'D']

如果你有很多分支,那么你可以:

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)

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

有很多方法可以做到这一点,但下面是我觉得最容易阅读的模式。

#Assume df is a Panda's dataframe object
idx = df.loc[:, 'A'] > x
df.loc[idx, 'A'] = df.loc[idx, 'C'] - df.loc[idx, 'D']

设置小于x的元素和df.loc[~idx,'A']=0一样简单

相关问题 更多 >