查找每个熊猫组的最近时间值

托尼
import pandas as pd
df = pd.DataFrame({'date': ['2014-06-22 17:46:00', '2014-06-24 16:52:00', '2014-06-25 20:02:00', '2014-06-25 17:55:00', '2014-07-02 11:36:00', '2014-07-06 12:40:00', '2014-07-05 12:46:00', '2014-07-27 15:12:00'],
    'type': ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C']})

>>> df
                  date type
0  2014-06-22 17:46:00    A
1  2014-06-24 16:52:00    A
2  2014-06-25 20:02:00    A
3  2014-06-25 17:55:00    B
4  2014-07-02 11:36:00    B
5  2014-07-06 12:40:00    C
6  2014-07-05 12:46:00    C
7  2014-07-27 15:12:00    C

如何获得最接近例如17:00小时(不考虑日期)的每个组元素的索引?理想的结果将是:

>>> df.groupby('type').date. ???
type
A    1
B    3
C    7
Name: date, dtype: int64

另外,如果我想找到最接近但早于给定时间的东西怎么办?再次在17:00时需要返回:

>>> df.groupby('type').date. ???
type
A    1
B    4
C    7
Name: date, dtype: int64
耶斯列尔

获取默认日期,添加times并获得时间差t

首先通过将的绝对值的最小索引乘以DataFrameGroupBy.idxmin,对于第二个解决方案,通过将NaNs的正值替换DataFrameGroupBy.idxmax和来获取每组的最大负值mask

df = pd.DataFrame({'date': ['2014-06-22 17:46:00', '2014-06-22 16:52:00', 
                            '2014-06-25 20:02:00', '2014-06-25 17:55:00', 
                            '2014-07-02 11:36:00', '2014-07-06 12:40:00', 
                            '2014-07-05 12:46:00', '2014-07-27 15:12:00'],
    'type': ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C']})

#convert column to datetimes
df['date'] = pd.to_datetime(df.date)

t = '17:00:00'
a = pd.to_datetime(df['date'].dt.strftime('%H:%M:%S')) - pd.to_datetime(t)
print (a)
0            00:46:00
1   -1 days +23:52:00
2            03:02:00
3            00:55:00
4   -1 days +18:36:00
5   -1 days +19:40:00
6   -1 days +19:46:00
7   -1 days +22:12:00
Name: date, dtype: timedelta64[ns]


b = a.abs().groupby(df['type']).idxmin()
print (b)
type
A    1
B    3
C    7
Name: date, dtype: int64

c = a.mask(a > pd.Timedelta(0)).groupby(df['type']).idxmax()
print (c)
type
A    1
B    4
C    7
Name: date, dtype: int64

详细说明

df1 = pd.concat([df, a, a.abs(), a.mask(a >  pd.Timedelta(0))], axis=1)
df1.columns = ['date','type','diff','absolute diff','max negative']
print (df1)
                 date type              diff absolute diff      max negative
0 2014-06-22 17:46:00    A          00:46:00      00:46:00               NaT
1 2014-06-22 16:52:00    A -1 days +23:52:00      00:08:00 -1 days +23:52:00
2 2014-06-25 20:02:00    A          03:02:00      03:02:00               NaT
3 2014-06-25 17:55:00    B          00:55:00      00:55:00               NaT
4 2014-07-02 11:36:00    B -1 days +18:36:00      05:24:00 -1 days +18:36:00
5 2014-07-06 12:40:00    C -1 days +19:40:00      04:20:00 -1 days +19:40:00
6 2014-07-05 12:46:00    C -1 days +19:46:00      04:14:00 -1 days +19:46:00
7 2014-07-27 15:12:00    C -1 days +22:12:00      01:48:00 -1 days +22:12:00

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

查找熊猫数据框之间的最近值

熊猫-涉及分类分组的最近值查找

熊猫查找满足特定条件的每个组中的行的索引,并为这些行分配值

熊猫-如何在每个数据帧组中执行OLS值对时间的回归?

查找每个组最近一年交易的最大日期

熊猫时间序列:根据年份和学期为每个ID查找以前的值

大熊猫从每个日期算起最近7天的值

熊猫-查找每个组中值的百分比

熊猫为每个时间段分配组号

查找最近的时间戳

在R中为每个组查找重叠的时间表

从熊猫中的每个其他时间戳减去每个组的最小时间戳

填写熊猫中每个组的缺失日期和回填值

熊猫为每个值组选择第一行

熊猫在满足条件的每个组中找到最大值

获取熊猫python中每个类别/组的重复值计数

查找每个组的最近日期并加入所有记录的性能问题

熊猫groupby对每个组值进行排序,并根据每个组的最大值对数据框组进行排序

在R中使用dplyr查找每个组的最大值

查找每个组中的前N个值

如何使用 SQL 查找每个组的重复值?

根据时间条件获取每个组的最大值

从数组中查找最近的时间

查找值高于/低于组中当前值的最近日期

通过Spark组查找时间戳的最小值

根据每个组的火花/标量的时间窗口查找上次发生的时间

Xarray 跨时间查找每个网格点的最大值

创建基于每个ID最近值在熊猫数据帧新列

熊猫按组总和获取每个组内的最大值