python - 对重复出现的行进行分组并从 Pandas 中的单个日期时间列中查找时间差

标签 python pandas pandas-groupby

我有一个带有时间列的数据框,然后是一个具有重复 A/B 值的值列。我需要能够将这些值分组并找到它们之间的时间增量。

import pandas as pd
df = pd.DataFrame()
df['time1'] = pd.date_range('2018-01-01', periods=6, freq='H') 
df['id'] = range(1,7)
df['val'] = ['A','B'] * 3

                 time  id val
0 2018-01-01 00:00:00   1   A
1 2018-01-01 01:00:00   2   B
2 2018-01-01 02:00:00   3   A
3 2018-01-01 03:00:00   4   B
4 2018-01-01 04:00:00   5   A
5 2018-01-01 05:00:00   6   B

需要...

index        diff     A   B
  0      01:00:00     1   2
  1      01:00:00     3   4
  2      01:00:00     5   6

最佳答案

创建一个 pair_id,这将用于识别对。将此添加到 df

pair_id = sorted(list(range(0, int(df.shape[0]/2))) * 2)
df.loc[:, 'pair'] = pair_id

定义差分函数

def diff(x):
    return max(x) - min(x)

使用groupby进行差值计算

diff_df = df.groupby('pair')['time1'].apply(diff).to_frame('diff')

并对剩余数据进行分组

id_df = df.groupby(['pair','val'])['id'].sum().unstack()

所以我们有diff_df:

         diff
pair         
0    01:00:00
1    01:00:00
2    01:00:00

id_df:

val   A  B
pair      
0     1  2
1     3  4
2     5  6

加入这两个

diff_df.join(id_df)
         diff  A  B
pair               
0    01:00:00  1  2
1    01:00:00  3  4
2    01:00:00  5  6

关于python - 对重复出现的行进行分组并从 Pandas 中的单个日期时间列中查找时间差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54707415/

相关文章:

python - 为每个 id 分区添加下个月的开始

python - 在输入不变的情况下在python中生成连续数字

python : How to know is there is a instantiation of a class in a container?

python - 从 ruby​​ 调用 python 脚本

python - 使用 Tkinter 的动画 gif 没有透明度

python - 根据另一个数据帧将值从一列滚动到另一列

python - 如何对字符串数组执行 bincount?

python - 过滤数据框的 Pandas 直方图

python - Pandas 将行分组为列表并求和

python - 使用 *not* 在 pandas groupby 中进行分组的标签