[英]Compare even and odd rows in a Pandas Data Frame
我有一個這樣的數據框:
指數 | 時間 | 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 | 13 |
5 | 10:10:07 | 13 |
6 | 10:10:08 | 11 |
7 | 10:10:10 | 11 |
8 | 10:10:12 | 11 |
9 | 10:10:14 | 13 |
我想比較每對的id
列。 所以在第0
行和1
行之間,在第2
行和3
行之間等等。換句話說,我想將偶數行與奇數行進行比較,並保持相同的id
對行。
我理想的輸出是:
指數 | 時間 | ID |
---|---|---|
2 | 10:10:02 | 12 |
3 | 10:10:04 | 12 |
4 | 10:10:06 | 13 |
5 | 10:10:07 | 13 |
6 | 10:10:08 | 11 |
7 | 10:10:10 | 11 |
我試過了,但沒有用:
df = df[
df[::2]["id"] ==df[1::2]["id"]
]
您可以使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.