gpt4 book ai didi

python - pandas 顺序遍历中的 groupby 操作

转载 作者:太空宇宙 更新时间:2023-11-03 14:12:27 25 4
gpt4 key购买 nike

通过顺序遍历数据并在每次验证特定条件时创建一个新组来对 pandas 数据帧进行分组的正确方法是什么。

例如:

time = [
pd.Timestamp('20130101 09:00:00'),
pd.Timestamp('20130101 09:00:02'),
pd.Timestamp('20130101 09:00:03'),
pd.Timestamp('20130101 09:01:05'),
pd.Timestamp('20130101 09:01:06'),
pd.Timestamp('20130101 09:01:07'),
pd.Timestamp('20130101 09:01:13'),
pd.Timestamp('20130101 09:01:15'),
pd.Timestamp('20130101 09:02:10'),
pd.Timestamp('20130101 09:03:40'),
pd.Timestamp('20130101 09:04:15')
]

df = pd.DataFrame({'B': [0, 1, 2, None, 4]}, time)

B
2013-01-01 09:00:00 0.0
2013-01-01 09:00:02 1.0
2013-01-01 09:00:03 2.0
2013-01-01 09:01:05 NaN
2013-01-01 09:01:06 4.0
2013-01-01 09:01:07 5.0
2013-01-01 09:01:13 6.0
2013-01-01 09:01:15 7.0
2013-01-01 09:02:10 8.0
2013-01-01 09:03:40 4.0
2013-01-01 09:04:15 1.0

如何对上述数据进行分组,每当一行的时间戳比前一行的时间戳早至少一小时时创建一个新组。

期望的输出:

G1
20130101 09:00:00
20130101 09:00:02
20130101 09:00:03

G2
20130101 09:01:05
20130101 09:01:06
20130101 09:01:07
20130101 09:01:13
20130101 09:01:15
20130101 09:02:10

G3
20130101 09:03:40
20130101 09:04:15

我可以用命令式的方式做到这一点,我想知道pandas API是否可以自然地表达这种类型的操作。

最佳答案

我假设您的意思是间隔一分钟而不是一小时,所以这是一个可能的解决方案。您可以像这样计算要分组的变量:

  • 将索引转换为系列并使用 diff 计算行之间的差异
  • 将这些值与您所需的时间增量(1 小时或 1 分钟)进行比较
  • 计算比较结果的累加和。这样,每当时间差距较大时,该值就会增加一。
  • 按结果列对数据框进行分组。

这是一个例子:

# using the time list provided in question
df = pd.DataFrame({'B': list(range(11))}, time)
g = (df.index.to_series().diff()>pd.to_timedelta('1m')).cumsum()
for i, group in df.groupby(g):
print(group)

B
2013-01-01 09:00:00 0
2013-01-01 09:00:02 1
2013-01-01 09:00:03 2
B
2013-01-01 09:01:05 3
2013-01-01 09:01:06 4
2013-01-01 09:01:07 5
2013-01-01 09:01:13 6
2013-01-01 09:01:15 7
2013-01-01 09:02:10 8
B
2013-01-01 09:03:40 9
2013-01-01 09:04:15 10

关于python - pandas 顺序遍历中的 groupby 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48407993/

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