我的第一个问题在这里!我正在寻找有关如何对 pandas 数据帧上的操作进行矢量化的帮助。我可以将问题简化为具有三列的数据框,一列具有将更新的值,两列具有迭代编号,两列之间的迭代编号不同。
我想做的是对于其中一个迭代列,对于迭代列中的每个第一个值,然后引用另一个迭代列(在同一索引处)的相应值,然后最后填充具有更新值的列的值(零),但仅适用于第二个迭代列具有相同值的行。希望这个例子能解释得更好一点:
df = pd.DataFrame()
df['update_col'] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
df['iter2'] = [0, 1, 1, 2, 2, 3, 3, 4, 4]
df['iter1'] = [0, 0, 1, 1, 1, 2, 2, 2, 2]
print(df)
# update_col iter2 iter1
0 1 0 0
1 2 1 0
2 3 1 1
3 4 2 1
4 5 2 1
5 6 3 2
6 7 3 2
7 8 4 2
8 9 4 2
所以基本上,我想做以下事情:
- 引用 iter1 列,以及它何时更改(即从 0 变为 1 或从 1 变为 2)
- 查看该索引处的 iter2 列
- 对于从步骤 2 中的索引开始的所有行,将“更新列”中的值更改为零,直到 iter2 递增为新值
所以输出将如下所示:
# update_col iter2 iter1
0 1 0 0
1 2 1 0
2 0 1 1
3 4 2 1
4 5 2 1
5 0 3 2
6 0 3 2
7 8 4 2
8 9 4 2
我认为正确构建groupby可能是一个解决方案,但我仍然是有效使用它的新手。
我目前正在通过一个复杂的 for 循环实现我想要的,它使运行时间对于我必须这样做的数据帧的大小和数量来说非常长。我认为另一种解决方案可能是maporreplace操作,但复杂的警告是,我不想更新 iter2 的该值的所有值,只更新 iter 1 的索引中的值,直到 iter2 中的最后一个值.
非常感谢任何帮助或见解!