我有一个带有时间列的数据框,然后是一个具有重复 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/