Pandas DataFrame同一组行之间的差异

时间:2018-01-18 20:52:29

标签: python pandas dataframe

很难在Title中描述问题。让我举几个例子:

我有以下数据框

id  value
asd123  2
asd123  4
asd124  15
asd124  32
asd125  2
asd125  3
asd126  5
asd126  14
asd126  22
asd127  7
asd127  17
asd127  30
asd128  23
asd128  28
asd129  3
asd130  25
asd131  56
asd132  3
asd133  53

我需要查找相同的id组和两列连续的值列大于5的值。(值列总是asc)如果它只是一条记录,它不需要查找差异价值。

我尝试为我的DF添加一个序列列:

id  value   sequence
asd123  2   1
asd123  4   2
asd124  15  1
asd124  32  2
asd125  2   1
asd125  3   2
asd126  5   1
asd126  14  2
asd126  22  3
asd127  7   1
asd127  17  2
asd127  30  3
asd128  23  1
asd128  28  2
asd129  3   1
asd130  25  1
asd131  56  1
asd132  3   1
asd133  53  1

基本上,如果sequence = 1记录,我可以删除,对于大于1的序列,我需要查找行之间的值列的差异,如果值差异大于5,我需要过滤掉那些记录。对于像3行的例子,我需要看两个连续的行和减去seq 2 - seq 1值和3-2,如果任何一个结果大于5,我将需要id。

提前谢谢。

df['sequence']=df.groupby('id').cumcount()
df_2=df[df['sequence']>=2]

1 个答案:

答案 0 :(得分:1)

IIUC:

df.set_index('id').groupby(level=0).diff().query('value > 5').index.unique().tolist()

输出:

['asd124', 'asd126', 'asd127']