如何在Pandas中保持具有相同ID和连续值的行?

  • 本文关键字:ID 连续 Pandas python pandas
  • 更新时间 :
  • 英文 :


我认为我的问题很容易理解,但我不知道如何在没有循环的情况下有效地做到这一点。

我的数据集(已经按ID和值排序)有ID,一些特征和值列(整数)我的目标是保持所有连续的值从第一次出现相同的ID,如果只有一个ID保持那个。

我认为用一个例子更容易理解让我给你们展示一下,我的数据集是这样的:

d = {'Id': [1, 1, 1, 1, 2, 3, 3, 3], 'Feature': ['F1', 'F1', 'F1', 'F1', 'F2', 'F3', 'F3', 'F3'], 'Value': [1, 2, 4, 5, 2, 15, 16, 18]}
df = pd.DataFrame(data=d)
Id  Feature   Value
0   1   F1        1
1   1   F1        2
2   1   F1        4
3   1   F1        5
4   2   F2        2
5   3   F3        15
6   3   F3        16
7   3   F3        18

注意:重复项已经被删除。注2:对于相同的ID,功能总是相同的,并且可能与其他ID重合。

我的目标是让这个返回:

Id  Feature   Value
0   1   F1        1
1   1   F1        2
4   2   F2        2
5   3   F3        15
6   3   F3        16

PS:如果有语法错误,请提前道歉,英语不是我的母语。

使用DataFrameGroupBy.diff,用1代替每行的缺失值,对不相等的1进行比较,用Series.cumsum进行累积和,用1进行比较,并在boolean indexing中进行过滤:

df = df[df.groupby('Id')['Value'].apply(lambda x: x.diff().ne(1).cumsum()).eq(1)]
print (df)
Id Feature  Value
0   1      F1      1
1   1      F1      2
4   2      F2      2
5   3      F3     15
6   3      F3     16

最新更新