gpt4 book ai didi

python-3.x - 将父列的相同值更新为 Pandas 数据框中的子列表值

转载 作者:行者123 更新时间:2023-12-03 18:43:15 25 4
gpt4 key购买 nike

输入数据框

data = {
'IDs': ['A1','A10','A11','A12','A13','A14','A17','A10','A68','A7','A68','A34','A6','A24','A20','A21','A34','A14','A20','A68'],
'S_S' :['G001','','','','','','','','','','','','','','','','','','','',],
'St_s': ['Pa','','','','','','','','','','','','','','','','','','','',],
'SsFlag': ['Pr','','','','','','','','','','','','','','','','','','','',],
'org_id' :[32,10,11,12,11,12,17,10,68,7,68,34,6,24,20,21,34,14,20,68,],
'flag': [[ '32','68','7'],['10', '68'],['11', '12', '34', '6'],['12','24'],['11','20','21','34'],['12','14','20'],['17','10','68'],[],[],[],[],[],[],[],[],[],[],[],[],[]]

}

df = pd.DataFrame.from_dict(data)
df

原始数据框的输出:

Out[713]: 
IDs S_S St_s SsFlag org_id flag
0 A1 G001 Pa Pr 32 [32, 68, 7]
1 A10 10 [10, 68]
2 A11 11 [11, 12, 34, 6]
3 A12 12 [12, 24]
4 A13 11 [11, 20, 21, 34]
5 A14 12 [12, 14, 20]
6 A17 17 [17, 10, 68]
7 A10 10 []
8 A68 68 []
9 A7 7 []
10 A68 68 []
11 A34 34 []
12 A6 6 []
13 A24 24 []
14 A20 20 []
15 A21 21 []
16 A34 34 []
17 A14 14 []
18 A20 20 []
19 A68 68 []

所需的数据框:

data = {
'IDs': ['A1','A10','A11','A12','A13','A14','A17','A10','A68','A7','A68','A34','A6','A24','A20','A21','A34','A14','A20','A68'],
'S_S' :['G001','','','','','','','','','','','','','','','','','','','',],
'St_s': ['Pa','','','','','','','','','','','','','','','','','','','',],
'SsFlag': ['Pr','','','','','','','','','','','','','','','','','','','',],
'org_id' :[32,10,11,12,11,12,17,10,68,7,68,34,6,24,20,21,34,14,20,68,],
'rel_id' : [32,10,11,11,11,12,17,17,32,32,10,11,11,12,11,11,11,12,12,17,],
'flag': [[ '32','68','7'],['10', '68'],['11', '12', '34', '6'],['12','24'],['11','20','21','34'],['12','14','20'],['17','10','68'],[],[],[],[],[],[],[],[],[],[],[],[],[]],
'Processed_first' :['','','','yes','','','','','','','','yes','yes','','yes','yes','yes','yes','yes','yes',]
}

df = pd.DataFrame.from_dict(data)
df

Out[679]:
IDs S_S St_s SsFlag org_id rel_id flag Processed_first
0 A1 G001 Pa Pr 32 32 [32, 68, 7]
1 A10 10 10 [10, 68]
2 A11 11 11 [11, 12, 34, 6]
3 A12 12 11 [12, 24] yes
4 A13 11 11 [11, 20, 21, 34]
5 A14 12 12 [12, 14, 20]
6 A17 17 17 [17, 10, 68]
7 A10 10 17 []
8 A68 68 32 []
9 A7 7 32 []
10 A68 68 10 []
11 A34 34 11 [] yes
12 A6 6 11 [] yes
13 A24 24 12 []
14 A20 20 11 [] yes
15 A21 21 11 [] yes
16 A34 34 11 [] yes
17 A14 14 12 [] yes
18 A20 20 12 [] yes
19 A68 68 17 [] yes

我需要一个列来更新 id,具体取决于 parent(org_id) 和 childs(rel_id) 列,其子列表位于标志列中,还添加了 processed_first 以供引用,以解释首先处理警报的逻辑,因此不需要处理该列。

对于 flag_list 中的每个元素更新 rel_id 列,第一次它获得与 org_id 相同的 self-id,第二个元素相关的 org_id 列应该由 parent_id 更新,在 rel_id 列中,例如第一行 32 首先获得 32 作为 id,第二个元素 68 出现在底部第 8 行因此获得 ID 为 32,因为 32 是它的父元素。同理,第2行10第一次得到id为10,第10行再次出现68得到相关id为10,process_firs表示alert处理完毕。

最佳答案

IIUC,这是更新 rel_id 的一种方法:

df_map = df.set_index('org_id')['flag'].explode().rename_axis('rel_id').rename('org_id').reset_index()
df_map = df_map.set_index(['org_id', df_map.groupby('org_id').cumcount()]).reset_index().dropna()
df_map['org_id'] = df_map['org_id'].astype('int')

df.set_index(['org_id', df.groupby('org_id').cumcount()]).reset_index().merge(df_map)

输出:

    org_id  level_1  IDs   S_S St_s SsFlag              flag  rel_id
0 32 0 A1 G001 Pa Pr [32, 68, 7] 32
1 10 0 A10 [10, 68] 10
2 11 0 A11 [11, 12, 34, 6] 11
3 12 0 A12 [12, 24] 11
4 11 1 A13 [11, 20, 21, 34] 11
5 12 1 A14 [12, 14, 20] 12
6 17 0 A17 [17, 10, 68] 17
7 10 1 A10 [] 17
8 68 0 A68 [] 32
9 7 0 A7 [] 32
10 68 1 A68 [] 10
11 34 0 A34 [] 11
12 6 0 A6 [] 11
13 24 0 A24 [] 12
14 20 0 A20 [] 11
15 21 0 A21 [] 11
16 34 1 A34 [] 11
17 14 0 A14 [] 12
18 20 1 A20 [] 12
19 68 2 A68 [] 17

关于python-3.x - 将父列的相同值更新为 Pandas 数据框中的子列表值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58803012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com