python - 在循环中更新一行,然后在下一次迭代中使用更新的值
问题描述
我想在我的数据集中有一个新列,当标识符相同时显示前面的操作,并结合当前行中的操作。
到目前为止,我已经尝试遍历 df,但这仅捕获前一行,而不是每组中的所有行。
从这样的数据开始:
requestTime identifier aggregation
38:00.5 123 abc
38:02.2 123 def
38:03.9 123 ghi
38:04.9 456 abc
这是我到目前为止尝试过的代码:
trial["newAgg"] = trial["aggregation"].shift(1)
trial["newId"] = trial["identifier"].shift(1)
for index, row in trial.iterrows():
if row.identifier == row.newId:
trial["newAgg"] + " - " + trial["aggregation"]
else:
trial["newAgg"] = trial["aggregation"]
输出:
requestTime identifier aggregation newAgg newId
38:00.5 123 abc abc
38:02.2 123 def abc - def 123
38:03.9 123 ghi def - ghi 123
38:04.9 456 abc abc 456
但我希望输出如下:
requestTime identifier aggregation newAgg newId
38:00.5 123 abc abc
38:02.2 123 def abc - def 123
38:03.9 123 ghi abc - def - ghi 123
38:04.9 456 abc abc 456
解决方案
据我所知,else 语句在初始化 newID 之前一开始就被触发,导致它等于下一行的“def”。
如果您希望 abc 预先初始化然后添加它可能会更好地将其作为上面的变量并继续添加以下更改。
trial["newAgg"] = trial["aggregation"].shift(1)
trial["newId"] = trial["identifier"].shift(1)
abcHold = "abc"
for index, row in trial.iterrows():
if row.identifier == row.newId:
abcHold + " - " + trial["newAgg"] + " - " + trial["aggregation"]
else:
trial["newAgg"] = trial["aggregation"]
或类似的规定。对我没有玩过 Pandas 和 Python 的一粒盐持怀疑态度。
祝你好运!