我有一个数据框
a = {'Price': [10, 15, 5, 25, 30], 'Total': [10000, 12000, 15000, 14000, 0],
'WAP': [10, 10.83, 9.66, 1, 1]}
a = pd.DataFrame(a)
print (a)
我正在寻找创建一个新列,该列显示a ['WAP'] == 1,然后查看a ['WAP']并返回非1列中的先前值。
所以在这种情况下,我想用值创建一个新列,
new = [10, 10.83, 9.66, 9.66, 9.66]
我尝试遍历该列,但只能将第一个1更改为9.66
aw = []
for i in range(len(a)):
if a.loc[i, 'WAP'] == 1:
aw.append(a.loc[i-1, 'WAP'])
else:
aw.append(a.loc[i, 'WAP'])
print (aw)
最佳答案
一种可能的解决方案:
for i, row in a.iterrows():
if row['WAP'] == 1:
a.loc[i, 'WAP'] = a.loc[i-1, 'WAP']
else:
a.loc[i, 'WAP'] = a.loc[i,'WAP']
print (a)
Price Total WAP
0 10 10000 10.00
1 15 12000 10.83
2 5 15000 9.66
3 25 14000 9.66
4 30 0 9.66
输入取决于先前步骤的结果的计算的迭代性质使向量化变得复杂。您也许可以将
apply
与一个函数进行计算,该函数的计算与循环相同,但是在后台,这也将是一个循环。另一个更好的解决方案是将
1
由NaN
替换为mask
,然后再替换ffill
先前的值:a.WAP = a.WAP.mask(a.WAP == 1).ffill()
print (a)
Price Total WAP
0 10 10000 10.00
1 15 12000 10.83
2 5 15000 9.66
3 25 14000 9.66
4 30 0 9.66
replace
解决方案:a.WAP = a.WAP.replace({1:np.nan}).ffill()
print (a)
Price Total WAP
0 10 10000 10.00
1 15 12000 10.83
2 5 15000 9.66
3 25 14000 9.66
4 30 0 9.66
关于python - Pandas 选择的最后一行值大于,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41920675/