我有一个 Dataframe 的形状:
| 第1列|第2列|
| - ------|- ------|
| 0.3 |1个|
| 0.22 |无|
| 0.89 |无|
| 0.12 |1个|
| 0.54 |无|
| 0.11 |1个|
假设此数据集基于时间排序,并且df.iloc[1]
在df.iloc[2]
之前,还假设Col 2是二进制的。
我想做的是按如下方式更改每个Col 2样本的值:df.iloc[i]['Col 2']为1(如果 Dataframe 中接下来的2个样本中有任何一个为1),否则为0。保持 Dataframe 的最后2个元素不变
例如,这里的结果将是:
| 第1列|第2列|
| - ------|- ------|
| 0.3 |无|
| 0.22 |1个|
| 0.89 |1个|
| 0.12 |1个|
| 0.54 |1个|
| 0.11 |1个|
到目前为止我所做的:
for i, j in df.iterrows():
if i<df.shape[0]-2:
df.iloc[i]['Col2'] = max([df.iloc[j]['Col2'] for j in range(i,i+2)])
我认为代码工作正常,但由于我的数据集非常大,它需要太多的时间来运行。有没有一个更优雅和计算友好的解决方案?
1条答案
按热度按时间c0vxltue1#
我想你想用
shift
来得到测试列的移位版本,然后把它们加起来并设置阈值。我在下面做了这个,中间的列c
留了下来,这样你就可以看到它是如何工作的。最后一列at_least_one
应该就是你要找的,如果我没有弄错的话。编辑:我刚刚尝试了100万行而不是10行,花费了2.6ms。