gpt4 book ai didi

python - 在没有 for 循环的情况下基于另外两个系列填充一个系列

转载 作者:太空宇宙 更新时间:2023-11-04 09:54:21 25 4
gpt4 key购买 nike

我有两个系列:s1 和 s2,填充了一年的每小时数据。我想创建另一个系列 s3,以便:

  • 如果对于特定的小时,s1> 0 且 s1 > s2,则 s3 = s1
  • 如果 s1 > 0 且 s1 <= s2, s3 = s2
  • 如果 s1 < 0, s3 = 0

所以我可以做类似的事情

for i in range(1,len(s1)):
if (s1.iat[i] > 0 and s1.iat[i]>s2.iat[i]):
s3.iat[i] = s1.iat[i]
elif (s1.iat[i] > 0 and s1.iat[i]>s2.iat[i]):
s3.iat[i] = s2.iat[i]
else:
s3.iat[i] = 0

但我确信有一种更优雅、希望更快的方法可以做到这一点。我已经尝试过许多使用 bool 索引和 numpy.where 的实现,但我不知道如何告诉 Python 执行“a[b>c]=b”。它似乎不喜欢逐行比较不同的数组。

最佳答案

map(lambda a: 0 if a[0]<0 else a[0] if a[0]>a[1] else a[1],  zip(s1,s2))

还有一些工作..

>>> s1=[-1,2,3,4,1,2,3,4]
>>> s2=[0,1,2,3,4,5,6,7]
>>> map(lambda a: 0 if a[0]<0 else a[0] if a[0]>a[1] else a[1], zip(s1,s2))
[0, 2, 3, 4, 4, 5, 6, 7]

这可能有助于解释..

>>> zip(s1,s2)
[(-1, 0), (2, 1), (3, 2), (4, 3), (1, 4), (2, 5), (3, 6), (4, 7)]

如果您采用上述内容并将其应用于您的代码...我不确定我这样做是否正确,因为我不知道 iat 是什么。

如果数组真的很大,我会将 zip 替换为 itertools.izip,因为那样会返回一个迭代器。

关于python - 在没有 for 循环的情况下基于另外两个系列填充一个系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46472985/

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