2013-04-30 6 views
2

breadcrumb 및 빈도 배열의 데이터 프레임을 취하여 breadcrumb의 누적 합계를 찾습니다. 명확히하기; 탐색 경로 (breadcrumb)는 나무 내의 일련의 부모 - 자식 관계이며 각 노드는 관련된 빈도를 가지고 있습니다. 트리 자체가 균일하지 않습니다.팬더 배열에 대한 조건부 누적 합계

pandasdf.A[1] = ['a','b','c','d'] 
pandasdf.A[2] = ['a','b','c'] 
pandasdf.A[1] = ['x','y','z','q'] 
pandasdf.A[2] = ['x','l'] 
pandasdf.B[1] = 12 # corresponding to 'd' 
pandasdf.B[2] = 7 # corresponding to 'c' 
pandasdf.B[3] = 2 # corresponding to 'q' 
pandasdf.B[4] = 9 # corresponding to 'l' 

고유 한 빵 부스러기로 (중복되므로 걱정할 필요가 없습니다). 모든 부모의 자녀들의 누적 합계에 해당하는 시리즈를 얻고 싶습니다. 즉이 경우 pandasdf.A == ['a']이 19가되고 pandasdf.A == ['a', 'b']이 19가 될 것입니다.

답변

2
import pandas as pd 
df = pd.DataFrame({ 
    'A': [['a','b','c','d'],['a','b','c'],['x','y','z','q'],['x','l']], 
    'B': [12,7,2,9] 
    }) 
print(df) 

#    A B 
# 0 [a, b, c, d] 12 
# 1  [a, b, c] 7 
# 2 [x, y, z, q] 2 
# 3  [x, l] 9 

def cumulative_frequence(df, nodes): 
    nodes = set(nodes) 
    mask = df['A'].apply(lambda group: not nodes.isdisjoint(group)) 
    return df.ix[mask, ['B']].sum().item() 

print(cumulative_frequence(df, ['a'])) 
print(cumulative_frequence(df, ['a','b'])) 
# 19 
# 19