我想在我的数据集中有一个新的列,当标识符与当前行中的操作相同时,显示前面的操作。你知道吗
到目前为止,我已经尝试通过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
假设你有熊猫,像这样的东西应该工作。你知道吗
*编辑:*根据您的代码片段,这应该适用于
trial["newAgg"]
无需编写else
您可以将pandas goupby与apply一起使用,让一个自定义函数来完成这项工作,而不是循环。
在这个例子中,我使用了lambda函数。你知道吗
groupby
自动选择应用自定义函数的具有相同'identifier'
值的数据帧子集。在本例中,我使用理解列表来选择要连接的字符串。
需要
reset_index
来摆脱多索引,以便将列连接回原始数据帧。你知道吗最终结果是:
据我所知,else语句在初始化newID之前就被触发了,导致它等于下一行的“def”。你知道吗
如果您希望abc预先初始化,然后再加上它,那么最好将它作为上面的变量,然后再添加以下更改。你知道吗
或者类似的东西。恕我直言,我很少和熊猫和Python玩。你知道吗
祝你好运!你知道吗
相关问题 更多 >
编程相关推荐