将列与pandas数据框中的列表匹配

时间:2017-03-04 18:47:16

标签: python pandas

我有一个如下数据框:

id          sub_id            others
NaN           10                xxx
10            11                xxx
10            13                xxx
10            15                xxx
11            12                xxx
11            16                xxx
13            14                xxx
15            17                xxx
12            20                xxx
16            55                xxx
16            85                xxx
14            19                xxx
14            43                xxx
17            87                xxx
17            91                xxx

比如说,例如id == 10是这个数据帧中的老板。 我有一个级别列表:levels = [a,b,c,d]。在我的级别列表中,a表示boss,b表示由boss管理的级别,c是由b管理的级别,等等。

我想要做的是我想看看哪个id管理sub_ids并基于它创建一个新列,该列说明sub_id对应的级别。

我希望我的最终数据框如下所示:

id          sub_id            others      level
NaN           10                xxx         a
10            11                xxx         b
10            13                xxx         b
10            15                xxx         b
11            12                xxx         c
11            16                xxx         c
13            14                xxx         c
15            17                xxx         c
12            20                xxx         d
16            55                xxx         d
16            85                xxx         d
14            19                xxx         d
14            43                xxx         d
17            87                xxx         d
17            91                xxx         d

我目前正在做以下事情:

pointer_subid = []
loop_subid = []



data['level'] = np.nan
boss = data[data.id.isnull()]
data['level'][(data['id'].isnull())] = 'a'
pointer_subid.append([boss['sub_id'])

levels = ['b', 'c', 'd']
k=0
while k < len(levels):
    for i in range(0, len(pointer_subid)):
        for j in range(0,len(data)): 
            data['level'][(data['id'][j] == i)] = levels[k]
            loop_subid.append(data['sub_id'][j])
    del pointer_subid
    pointer_subid = list(loop_subid)
    del loop_subid
    loop_subid = []
    k = k+1

我不确定上面的代码是否有效。它现在一起跑了几个小时,我也无法检查它是否给了我想要的结果。还有其他有效的方法吗?

任何帮助将不胜感激。提前谢谢..

1 个答案:

答案 0 :(得分:1)

你可以做这样的事情

<div class="section top"></div>
<div class="section middle"></div>
<div class="section bottom"></div>