我试图弄清楚如何将列的上一行的元素与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列。
如果有人对如何做到这一点有任何想法,我非常感谢你的建议。
答案 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; 。