您好我想知道使用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中找到任何东西。
先谢谢。
答案 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?
}