python - Pandas GroupBy 日期范围取决于每一行

标签 python pandas

我想做以下事情:

对于如下所示的数据框:

df = pd.DataFrame({"ID":["A", "A", "C" ,"B", "B"], "date":["06/24/2014","06/25/2014","06/23/2014","07/02/1999","07/02/1999"], "value": ["3","5","1","7","8"] })

我想按日期对所有在 2 天内的观察结果进行分组。然后,例如,前 3 行将被分组,最后两行将被分组。

到目前为止,我想到了使用类似于:

df.groupby(df['date'].map(lambda x: x.month))

进行这种“模糊分组”的一般方法是什么?

谢谢你,

最佳答案

您可以按日期 对行进行排序,然后计算连续日期之间的差值。 当差异大于 2 天时进行测试。取累计和分配所需的组号:

import pandas as pd
df = pd.DataFrame({"ID":["A", "A", "C" ,"B", "B"], "date":["06/24/2014","06/25/2014","06/23/2014","07/02/1999","07/02/1999"], "value": ["3","5","1","7","8"] })
df['date'] = pd.to_datetime(df['date'])
df = df.sort_values(by='date')
df['group'] = (df['date'].diff() > pd.Timedelta(days=2)).cumsum()
print(df)

产量

  ID       date value  group
3  B 1999-07-02     7      0
4  B 1999-07-02     8      0
2  C 2014-06-23     1      1
0  A 2014-06-24     3      1
1  A 2014-06-25     5      1

关于python - Pandas GroupBy 日期范围取决于每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38151013/

相关文章:

Python添加到一个列表是一个键的值

python - 扩展 django 管理模板

python - 由于数据库输入错误而切换到特定类别的列

python-3.x - 使用 Pandas 时出现错误 urlopen 错误 [SSL : CERTIFICATE_VERIFY_FAILED] certificate verify failed

python - 删除 Pandas 数据框中多次出现的重复值

python - Pandas:通过 OR 条件索引行

android - 在 Android 中运行 Python REPL

python - 复制训练示例以处理 pandas 数据框中的类不平衡

python - 按组对 Pandas 数据框进行排序并保持所需的顺序

python-3.x - 如何将每隔一行提取到数据框中的单独列中?