gpt4 book ai didi

pandas - 为什么对 pandas 列进行排序会导致对子组进行重新排序?

转载 作者:行者123 更新时间:2023-12-05 03:30:20 25 4
gpt4 key购买 nike

<分区>

我的问题的目的是了解为什么会发生这种情况以及这是否是一种已定义的行为。我需要知道以可预测的方式设计我的单元测试。我想要或需要改变这种行为或解决它。

这是左侧完整的初始数据,右侧是所有 ID.eq(1)但顺序与您在索引和 val 中看到的相同专栏。

|    |   ID | val   |      |    |   ID | val   |                               
|---:|-----:|:------| |---:|-----:|:------|
| 0 | 1 | A | | 0 | 1 | A |
| 1 | 2 | B | | 3 | 1 | x |
| 2 | 9 | C | | 4 | 1 | R |
| 3 | 1 | x | | 6 | 1 | G |
| 4 | 1 | R | | 9 | 1 | a |
| 5 | 4 | F | | 12 | 1 | d |
| 6 | 1 | G | | 13 | 1 | e |
| 7 | 9 | H |
| 8 | 4 | I |
| 9 | 1 | a |
| 10 | 2 | b |
| 11 | 9 | c |
| 12 | 1 | d |
| 13 | 1 | e |
| 14 | 4 | f |
| 15 | 2 | g |
| 16 | 9 | h |
| 17 | 9 | i |
| 18 | 4 | X |
| 19 | 5 | Y |

右表也是我在执行以下操作时预期的结果:当我按 ID 排序时子组内行的顺序(例如 ID.eq(1))被修改。为什么会这样?

这是意外的结果

|    |   ID | val   |
|---:|-----:|:------|
| 0 | 1 | A |
| 13 | 1 | e |
| 12 | 1 | d |
| 6 | 1 | G |
| 9 | 1 | a |
| 3 | 1 | x |
| 4 | 1 | R |

这是一个完整的MWE

#!/usr/bin/env python3
import pandas as pd

# initial data
df = pd.DataFrame(
{
'ID': [1, 2, 9, 1, 1, 4, 1, 9, 4, 1,
2, 9, 1, 1, 4, 2, 9, 9, 4, 5],
'val': list('ABCxRFGHIabcdefghiXY')
}
)
print(df.to_markdown())

# only the group "1"
print(df.loc[df.ID.eq(1)].to_markdown())

# sort by 'ID'
df = df.sort_values('ID')
# only the group "1" (after sorting)
print(df.loc[df.ID.eq(1)].to_markdown())

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com