gpt4 book ai didi

Python cumsum 每次遇到新值时递增

转载 作者:太空宇宙 更新时间:2023-11-04 04:59:08 27 4
gpt4 key购买 nike

来自 R,代码将是

x       <- data.frame(vals = c(100,100,100,100,100,100,200,200,200,200,200,200,200,300,300,300,300,300))
x$state <- cumsum(c(1, diff(x$vals) != 0))

每次行之间的差异不为零时都会标记,这样我就可以用它来发现数据中的转换,如下所示:

   vals state
1 100 1
...
7 200 2
...
14 300 3

什么是 Python 中的干净等价物?

附加问题

原始问题的答案贴在下面,但对于带有 pandas 的分组数据框将无法正常工作。

这里的数据:https://pastebin.com/gEmPHAb7 .请注意,有 2 个不同的文件名。

当导入为 df_all 时,我将其与以下内容分组,然后应用下面发布的解决方案。

df_grouped = df_all.groupby("filename")
df_all["state"] = (df_grouped['Fit'].diff() != 0).cumsum()

最佳答案

使用 diffcumsum,如您的 R 示例:

df['state'] = (df['vals'].diff()!= 0).cumsum()

这利用了 True 具有整数值 1 的事实

奖励问题

df_grouped = df_all.groupby("filename")
df_all["state"] = (df_grouped['Fit'].diff() != 0).cumsum()

我认为您误解了 groupby 的作用。所有 groupby 所做的就是根据条件创建组(在本例中为 filename)。然后你需要告诉添加另一个操作来告诉这个组需要发生什么。常见操作有meansum,或更高级的applytransform。您可以找到更多信息 herehere

如果你能更详细地解释你想用 groupby 实现什么,我可以帮助你找到正确的方法。如果你想对每个文件名执行上述操作,你可能需要这样的东西:

def get_state(group):
return (group.diff()!= 0).cumsum()

df_all['state'] = df_all.groupby('filename')['Fit'].transform(get_state)

关于Python cumsum 每次遇到新值时递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46275290/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com