gpt4 book ai didi

python - 如何根据 'Parent' 进行索引和排序?

转载 作者:行者123 更新时间:2023-12-01 00:34:22 26 4
gpt4 key购买 nike

<小时/>

问题 1

我有一个像这样的数据框:

import pandas as pd
import numpy as np
df = pd.DataFrame({'Code': [1,2,3,4,5,10,45],'Parent':[2,np.nan,4,2,3,45,2]})

enter image description here

如何根据父列进行排序?我首先说第一个将是没有父级的代码,其“索引”将为 1。其他将基于其父级和出现顺序 (df.index) .

索引 = 父索引 + '.' + 出现顺序

我相信 df.loc[df['Parent'].isna(),'Index'] = 1 是一个好的开始。之后,来自一个的直接“子级”将只有一个点,并且将根据数据帧顺序进行排序,因此,我们将有

enter image description here

由于代码 2 是起始父级,因此我们将移动到其子级(代码 1、4 和 45,按此顺序)。

因此,在这次迭代之后,我们将得到:

enter image description here

在下一步中,我们将查找代码 1、4 和 45 的子代,依此类推,直到索引列中不再有 NaN。

预期最终结果(按照问题2排序后)为:

enter image description here

我们可以将其视为章节、章节和小节,而不是“父级”。这个想法是代码位于父级内部,或者来自于父级。家长是直接上级。

<小时/>

问题 2

此外,还有另一个问题。假设

df['Index']= pd.Series(['1.1','1','1.2.1','1.2.16.1','1.2.2.1','1.3.1','1.3'])

我希望 1.2.16.1 出现在 1.2.2.1 之后但是,如果我尝试:

df = pd.DataFrame({'Code': [1,2,3,4,5,10,45],'Parent':[2,np.nan,4,2,3,45,2]})
df['Index'] = pd.Series(['1.1','1','1.2.1','1.2.16.1','1.2.2.1','1.3.1','1.3'])
df = df.sort_values(by=['Index'])

我得到的是:

enter image description here

预期结果是:

enter image description here

最佳答案

使用natsorted的一种方法

from natsort import natsorted

df = df.set_index('Index').reindex(natsorted(df.Index)).reset_index()
Out[42]:
Index Code Parent
0 1 2 NaN
1 1.1 1 2.0
2 1.2.1 3 4.0
3 1.2.2.1 5 3.0
4 1.2.16.1 4 2.0
5 1.3 45 2.0
6 1.3.1 10 45.0

关于python - 如何根据 'Parent' 进行索引和排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57916253/

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