python - 将唯一分层列拆分为更多列

标签 python pandas

我有以下情况:

COD Level
UF  11
ME  1101
MI  11001
MU  1100452
MU  1100700
MI  11002
MU  1100080
MU  1100106
MU  1101492
ME  1102
MI  11003
MU  1100403
MU  1100023
UF  12
ME  1201
MI  12001
MU  1100122

.... (7000 rows)

------------ 解释

UF - 2 digits (higher level)
ME - 4 digits (level 2)
MI - 5 digits (level 1)
MU - 7 digits (level 0)

我正在尝试重新组织此结构,以便按列分隔每个级别:

预期输出:

COD Level_0  Level_1  Level_2  Level_3  
MU  1100452    11001     1101    11
MU  1100700    11001     1101    11    
MU  1100080    11002     1101    11
MU  1100106    11002     1101    11
MU  1101492    11002     1101    11
MU  1100403    11003     1102    11
MU  1100023    11003     1102    11
MU  1100122    12001     1201    12

因此,每个级别都将相同,直到出现具有相同级别的另一行。

最佳答案

类似这样的吗?

In [48]: pd.pivot(df, columns='COD', values='Level').fillna(method='ffill').drop_duplicates('MU').dropna().astype(int).rename(columns={'UF': 'level_3', 'ME': 'level_2', 'MI': 'level_1', 'MU': 'level_0'})
    ...:                                                                                                                                                                                                   
Out[48]: 
COD  level_2  level_1  level_0  level_3
3       1101    11001  1100452       11
4       1101    11001  1100700       11
6       1101    11002  1100080       11
7       1101    11002  1100106       11
8       1101    11002  1101492       11
11      1102    11003  1100403       11
12      1102    11003  1100023       11
16      1201    12001  1100122       12

pd.pivot 为“COD”中的每个值创建一个单独的列。此时所有其他列都是不适用的。然后,您可以使用 fillnaforward fill 来向下传播上层的值,最后您需要删除仍包含 NA 的前几行> 因为 level_0 尚未写入。 剩下的就是符合你的预期输出。

编辑:使用 drop_duplicates 以避免在 level_3 更改时保留之前的值

关于python - 将唯一分层列拆分为更多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63134619/

相关文章:

python - 比较行时如何绘制条形图?

python - Pandas 数据框打印字符串+更改变量

python - 为 OOV 词添加新向量的正确方法

python - 词法分析器正则表达式 pygments g 代码

python - 在 python 中返回匹配行的字符串搜索

python - 将 CSV 文件内容与 filecmp 进行比较并忽略元数据

python - 这 8 行 python + pandas 需要大约 1 个月才能执行,能帮我加快速度吗?

python - 为什么 `float.is_integer` 中有下划线,但 `str.isnumeric` 中没有?

python - 用 BeautifulSoup 按摩或用 Regex 清洁

python - Pandas:通过多列查找另一个DataFrame中不存在的行