如何在列上使用尾随行进行同一列的计算熊猫Python

时间:2016-01-15 00:22:56

标签: python excel numpy pandas

我试图弄清楚如何将列的上一行的元素与Pandas DataFrame中当前行的不同列进行比较。例如:

data = pd.DataFrame({'a':['1','1','1','1','1'],'b':['0','0','1','0','0']})

输出:

   a   b
0  1   0
1  1   0
2  1   1
3  1   0
4  1   0

现在我想制作一个新专栏,询问(数据[' a'] +数据[' b'])是否大于同一列的先前值。 理论上:

data['c'] = np.where(data['a']==( the previous row value of data['a'] ),min((data['b']+( the previous row value of data['c'] )),1),data['b'])

这样我理论上可以输出:

   a   b   c
0  1   0   0
1  1   0   0
2  1   1   1
3  1   0   1
4  1   0   1

我想知道怎么做,因为我试图重新创建这个excel条件语句:= IF(A70 = A69,MIN((P70 + Q69),1),P70)

其中数据[' a'] = A列和数据[' b'] = P列。

如果有人对如何做到这一点有任何想法,我非常感谢你的建议。

1 个答案:

答案 0 :(得分:1)

根据您的声明:'新列询问(数据[' a'] +数据[' b'])是否大于之前的数据同一列的价值' 我建议您通过这种方式解决它:

>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame({'a':['1','1','1','1','1'],'b':['0','0','1','0','3']})
>>> df
   a  b
0  1  0
1  1  0
2  1  1
3  1  0
4  1  3
>>> df['c'] = np.where(df['a']+df['b'] > df['a'].shift(1)+df['b'].shift(1), 1, 0)
>>> df
   a  b  c
0  1  0  0
1  1  0  0
2  1  1  1
3  1  0  0
4  1  3  1

但它并没有寻找以前相同列的值<#39; 。 如果您尝试在df['c'].shift(1)中撰写np.where(),则会引发 KeyError:&#39; c&#39;