Python Pandas,分组/分组问题

2024-05-06 11:51:04 发布

您现在位置:Python中文网/ 问答频道 /正文

具有以下DF:


        parnet_path     child level
0          A[].B{}         C     3
1        A[].BBB{}         C     3
2    A[].B{}.CCC{}         D     4
3    A[].B{}.CCC{}        AA     4
4    A[].B{}.CCC{}   LALALLA     4
5             BB{}         A     2
6             BB{}         B     2
7              C{}  no_child     1
8                D  no_child     1
9    A[].B{}.CCC{}       DDD     4
10   A[].B{}.CCC{}       RRR     4
11  AA[].BB{}.CC{}       ZZZ     4
12  AA[].BB{}.CC{}       EEE     4
13  AA[].BB{}.CC{}       OOO     4
14   A[].B{}.CDD{}        AA     4

我想在parent_path列和level中收集同一目录下的child, 我想到了这个:

df.sort_values(by=['level','parnet_path', 'child',] , ascending=False, inplace=True)
df=df.groupby('parnet_path').agg({lambda x: list(x)})

Out>:

                                      child            level
                                  <lambda>         <lambda>
parnet_path
AA[].BB{}.CC{}             [ZZZ, OOO, EEE]        [4, 4, 4]
A[].BBB{}                              [C]              [3]
A[].B{}                                [C]              [3]
A[].B{}.CCC{}   [RRR, LALALLA, DDD, D, AA]  [4, 4, 4, 4, 4]
A[].B{}.CDD{}                         [AA]              [4]
BB{}                                [B, A]           [2, 2]
C{}                             [no_child]              [1]
D                               [no_child]              [1]


它没有将列名称保存为原始DF中的列名称, 我试过:

df.columns = df.columns.droplevel(1)
print(df)
out:>
                                     child            level
parnet_path
AA[].BB{}.CC{}             [ZZZ, OOO, EEE]        [4, 4, 4]
A[].BBB{}                              [C]              [3]
A[].B{}                                [C]              [3]
A[].B{}.CCC{}   [RRR, LALALLA, DDD, D, AA]  [4, 4, 4, 4, 4]
A[].B{}.CDD{}                         [AA]              [4]
BB{}                                [B, A]           [2, 2]
C{}                             [no_child]              [1]
D                               [no_child]              [1]

print(df.index)

out:>

 Index(['AA[].BB{}.CC{}', 'A[].BBB{}', 'A[].B{}', 'A[].B{}.CCC{}',
       'A[].B{}.CDD{}', 'BB{}', 'C{}', 'D'],
      dtype='object', name='parnet_path')

但是不知何故,父路径(它是第一个列名)现在是索引名,我不得不按父路径+级别对DF进行排序。 得到 " 对于多索引,标签必须是元组,其元素对应于每个级别。”

  • 我希望看到在不同的水平,并建议你们,如果我这样做是正确的方式

谢谢你的帮助