Pandas选择的最后一行值大于

2024-03-28 09:21:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧

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)

我希望创建一个新的列,如果['WAP']==1,那么查看['WAP']并返回列中不是1的先前值。在

所以在这个例子中,我想创建一个新的列

^{pr2}$

我尝试过遍历该列,但只能将第一个1改为9.66

^{3}$

Tags: 数据dataframeprice例子totalpdprintwap
1条回答
网友
1楼 · 发布于 2024-03-28 09:21:42

一种可能的解决方案:

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替换为^{},然后^{}之前的值:

^{pr2}$

^{}的解决方案:

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

相关问题 更多 >