gpt4 book ai didi

python - Pandas 选择最后一行值大于

转载 作者:行者123 更新时间:2023-11-30 22:43:01 26 4
gpt4 key购买 nike

我有一个数据框

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 替换为 NaNmask然后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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com