小能豆

比较 Pandas 数据框中的偶数行和奇数行

py

我有一个这样的数据框:

指数 时间 ID
0 10:10:00 11
1 10:10:01 12
2 10:10:02 12
3 10:10:04 12
4 10:10:06 十三
5 10:10:07 十三
6 10:10:08 11
7 10:10:10 11
8 10:10:12 11
9 10:10:14 十三

我想比较id每对的列。因此,在行0和之间1,在行23之间等等。换句话说,我想比较偶数行和奇数行,并保留相同的id行对。

我的理想输出是:

指数 时间 ID
2 10:10:02 12
3 10:10:04 12
4 10:10:06 十三
5 10:10:07 十三
6 10:10:08 11
7 10:10:10 11

我尝试过,但是没有效果:

df = df[
    df[::2]["id"] ==df[1::2]["id"]
]

阅读 6

收藏
2025-01-12

共1个答案

小能豆

您可以使用一种GroupBy.transform方法:

# for each pair, is there only one kind of Id?
out = df[df.groupby(np.arange(len(df))//2)['Id'].transform('nunique').eq(1)]

或者,更有效的是,使用底层的 numpy 数组:

# convert to numpy
a = df['Id'].to_numpy()

# are the odds equal to evens?
out = df[np.repeat((a[::2]==a[1::2]), 2)]

输出:

   Index      Time  Id
2      2  10:10:02  12
3      3  10:10:04  12
4      4  10:10:06  13
5      5  10:10:07  13
6      6  10:10:08  11
7      7  10:10:10  11
2025-01-12