列上的python pandas操作

时间:2013-08-12 07:55:29

标签: 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']

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

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

先谢谢。

4 个答案:

答案 0 :(得分:6)

您可以使用带有DataFrame的.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循环快得多。

答案 1 :(得分: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']

经测试,它有效。

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

答案 2 :(得分:0)

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

#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

一样简单

答案 3 :(得分:0)

从...开始

df.ix[df.A < 1,df.A = df['c'] - df['d']]; df
    a   b   c
0   7   12  5.000000
1   7   12  5.000000
2   7   12  5.000000
3   7   12  5.000000
4   7   12  1.813233

结束......

componentDidMount(){
    axios.post('mydomian.com/item/',this.state)
    .then(function (response) {
        const res = response.data
        if (res.status === 'OK') {
            this.setState({items :res.list})
        }else{
            console.log('can not load data', response)
        }
    }.bind(this))
}
componentWillUnmount(){
    how to stop everything about axios?
}