首页 > 解决方案 > 在循环中更新一行,然后在下一次迭代中使用更新的值

问题描述

我想在我的数据集中有一个新列,当标识符相同时显示前面的操作,并结合当前行中的操作。

到目前为止,我已经尝试遍历 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

标签: pythonpandas

解决方案


据我所知,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 的一粒盐持怀疑态度。

祝你好运!


推荐阅读