1. The Data:
我在Pandas 数据框中有以下 struct :
import pandas as pd
df = pd.DataFrame([['A', 'NaN', 'A', 'NaN'],['B', 'A', 'B/A', 'A'], ['B1', 'B', 'B1/B/A', 'B/A'],
['B2', 'B', 'B2/B/A', 'B/A'], ['C', 'B1', 'C/B1/B/A', 'B1/B/A'], ['D', 'B1', 'D/B1/B/A', 'B1/B/A'],
['E', 'B2', 'E/B2/B/A', 'B2/B/A']],
columns=['unit_id', 'group_id', 'new_unit_id', 'new_group_id'])
2. The issue and the goal:
我想用一个附加到父 struct 的值替换当前的unit_id
和group_id
,基本上如下所示:
<unit_id> = <unit_id> + '/' + parent<unit_id>
and
<group_id> = parent<unit_id>
正如您在文件树 struct 或类似 struct 中看到的那样.
比如:
index | unit_id | group_id | new_unit_id | new_group_id |
---|---|---|---|---|
0 | A | NaN | A | NaN |
1 | B | A | B/A | A |
2 | B1 | B | B1/B/A | B/A |
3 | B2 | B | B2/B/A | B/A |
4 | C | B1 | C/B1/B/A | B1/B/A |
5 | D | B1 | D/B1/B/A | B1/B/A |
6 | E | B2 | E/B2/B/A | B2/B/A |
3. Attempts and approach:
我曾try 过在不创建"新"列的情况下就地映射,但遇到了这样的问题:当父对象的unit_id
更改时,它不会反映在其子对象的group_id
中.
df['unit_id'] = df['unit_id'] + '/' + df['group_id']
所以我似乎需要逐行迭代,以便将前一行的更改考虑在内.比如:
df['unit_id'] = df.apply(lambda row : row['unit_id'].replace(str(row['unit_id']), str(row['unit_id'] + '/' + row['group_id'])), axis=1)
这会产生与上述相同(不准确)的值,但我认为使用正确的匿名(lambda)函数的df.apply
更接近我需要的值.语法错误.