Python熊猫,如何以非常特定的方式对齐数据框?

时间:2020-06-09 19:16:50

标签: python-3.x pandas dataframe sorting alignment

我有一个表示,路径和路径上的元素的数据框。

>>> import pandas as pd
>>>
>>> df = pd.DataFrame({
...     'path_id' : [1,1,1,1,2,2,2,2,3,3,3,3,3],
...     'priority' : [1,2,3,4,1,2,3,4,1,2,3,4,5],
...     'element':['X', 'B', 'C', 'D', 'Y', 'C', 'D', 'E', 'Z', 'B', 'E', 'F', 'G']
... })
>>> df
    path_id  priority element
0         1         1       X
1         1         2       B
2         1         3       C
3         1         4       D
4         2         1       Y
5         2         2       C
6         2         3       D
7         2         4       E
8         3         1       Z
9         3         2       B
10        3         3       E
11        3         4       F
12        3         5       G
>>>

因此在path_id = 1中,元素X连接到元素B,元素B连接到元素C,依此类推。 我已经计算出每个元素的最大位置,如下所示:

>>> df_max_priority = df.groupby(['element']).priority.max().sort_values(ascending=False).reset_index()
>>> df_max_priority
  element  priority
0       G         5
1       F         4
2       E         4
3       D         4
4       C         3
5       B         2
6       Z         1
7       Y         1
8       X         1

现在,我已按照path_id对数据帧进行了分组,以获取宽格式:

>>> df_wide = df.groupby(['path_id', 'priority'])['element'].first().unstack().sort_values(1)
>>> df_wide
priority  1  2  3  4    5
path_id
1         X  B  C  D  NaN
2         Y  C  D  E  NaN
3         Z  B  E  F    G

我现在需要的是对齐这样的元素:

>>> pd.DataFrame([
...     [1, 'X', 'B', 'C', 'D', '', '', ''],
...     [2, 'Y', '', 'C', 'D', 'E', '', ''],
...     [3, 'Z', 'B', '', '', 'E', 'F', 'G'],
... ])
   0  1  2  3  4  5  6  7
0  1  X  B  C  D
1  2  Y     C  D  E
2  3  Z  B        E  F  G
>>>      

这意味着,每个元素应在其列中,但最大位置显示哪个元素在另一个元素上方。例如,元素G必须位于最右边,因为其最大位置最高。 在现实生活中,元素名称不是按字母顺序排列的。

NaN应该标记跳过的元素(孔)。

如何以这种方式对齐数据框?

0 个答案:

没有答案
相关问题