将数值映射到一个新的数据框架列中[英] Mapping values into a new dataframe column

本文是小编为大家收集整理的关于将数值映射到一个新的数据框架列中的处理方法,想解了将数值映射到一个新的数据框架列中的问题怎么解决?将数值映射到一个新的数据框架列中问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个数据集(约 7000 行),我已在 Pandas 中导入了一些"数据争论",但我需要一些正确方向的指针才能采取下一步.我的数据如下所示,它是对具有多个子级别的结构的描述.B、D 和 B 是 A 的子级别.C 是 B 的子级别.等等……

等级、名称
0, A
1、乙
2、C
1、D
2、电子
3、F
3、G
1、乙
2、C

但我想要类似下面的东西,Name 和 Mother_name 在同一行:

等级、姓名、母名
1、B、A
2、C、B
1、D、A
2、E、D
3、F、E
3、G、E
1、B、A
2、C、B

推荐答案

如果我理解正确的格式,name 的父级依赖于level 比当前行的 level 小一的最近前行.

您的 DataFrame 的行数适中 (~7000).所以几乎没有伤害(对性能)简单地遍历行.如果 DataFrame 非常大,如果您可以使用按列矢量化的 Pandas,您通常会获得更好的性能操作而不是逐行迭代.然而,在这种情况下,似乎使用按列向量化的 Pandas 操作很尴尬,而且过于复杂.所以我相信逐行迭代是这里的最佳选择.

使用df.iterrows进行逐行迭代,你可以简单地记录当前每一层的父母,并酌情填写"母亲":

import pandas as pd
df = pd.DataFrame({'level': [0, 1, 2, 1, 2, 3, 3, 1, 2],
                   'name': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'B', 'C']})

parent = dict()
mother = []
for index, row in df.iterrows():
    parent[row['level']] = row['name']
    mother.append(parent.get(row['level']-1))
df['mother'] = mother
print(df)

产量

   level name mother
0      0    A   None
1      1    B      A
2      2    C      B
3      1    D      A
4      2    E      D
5      3    F      E
6      3    G      E
7      1    B      A
8      2    C      B

本文地址:https://www.itbaoku.cn/post/1727803.html