2017-12-28 21 views
0

저는 카테고리 값의 가치에 근거하여 4 번째 값 (버디의 2 가지 유형 중 하나)을 할당하려고합니다.팬더의 확률 함수로 값을 지정하십시오.

는 무작위로 할당 된 3 개 기능에 대한 값을

작은 DF :

 Unique_ID Category Age  Sex  Buddy 
0  0   2   11  male  NaN 
1  1   3   7  female  NaN 
2  2   1   4  male  NaN 
3  3   2   20  male  NaN 
4  4   1   19  female  NaN 

내가 대답하면 도움이 DF를 생성하는 코드를 포함 카테고리, 연령과 성별은

난 하드 코딩에 함수를했습니다 np.random.choice에 대한 확률이지만 df에 assign_buddy 함수를 적용 할 때 오류 메시지가 표시되는 경우 ValueError : Series의 진리 값이 모호합니다. a.empty, a.bool(), a.item(), a.any() 또는 a.all()을 사용하십시오.

columns = ['Unique_ID', 'Category', 'Age', 'Sex', 'Buddy'] 
df = pd.DataFrame(columns=columns) 

Sexes = ['female', 'male'] 
df.Sex = np.random.choice(a=Sexes, size=n, p=[0.6, 0.4]) 

list_Category = [1,2,3,4] 
df.Category = np.random.choice(a=list_category, size=n, p=[0.3, 0.4, 0.2, 0.1]) 

buddy_list = ['buddy_1', 'buddy_2'] 

def assign_buddy(Category_prob_list): 
""" 
takes in a Category value 
return: Buddy 
"""  
    if df['Category'] == list_Category[0]: 
     df['Buddy'] = np.random.choice(a=buddy_list, size=n, p=[0.1, 0.9]) 
     return df['Buddy'] 
    elif df['Category'] == list_Category[1]: 
     df['Buddy'] = np.random.choice(a=buddy_list, size=n, p=[0.3, 0.7]) 
     return df['Buddy'] 
    elif df['Category'] == list_Category[2]: 
     df['Buddy'] = np.random.choice(a=buddy_list, size=n, p=[0.7, 0.3]) 
     return df['Buddy'] 
    elif df['Category'] == list_Category[3]: 
     df['Buddy'] = np.random.choice(a=buddy_list, size=n, p=[0.9, 0.1]) 
     return df['Buddy'] 
    else: 
     pass 
# should apply assign_buddy to each row in df 
df['Category'].apply((assign_buddy)) 

나는 assign_buddy에 대한 확률 사전을 가지고 있지만 모든 문서에도 불구하고지도를 파악하고 논리를 적용 할 수는 없습니다.

np.random.choice의 인수 p에 전달 될 확률을 d에서 반환하는 함수를 만들려고했지만 작동하지 않습니다.

# key is category label and values are probabilities for np.random.choice 
d = {1: [0.1, 0.9], 2: [0.3, 0.7], 3: [0.7, 0.3], 4: [0.9, 0.1]} 

감사 인사! 이 과제를 수행하는 방법

+0

당신이 나를 이해하는 데 도움이 시도? 친구 란 무엇입니까? 높은 수준에서 해결하려는 문제를 설명하십시오. –

+0

. 합성 데이터 세트에 값을 확률 적으로 할당하는 함수를 정의하는 방법을 배우려는 것입니다. 분석 테스트가 견고하고 다른 입력을 반영하는지 테스트하기 위해 값을 확률 적으로 삽입하려고합니다. 마찬가지로, 확률 사전은 별도의 파일에서 정보가 통합되면 변경 될 가정과 함께 작성되었습니다. – user426

+0

은 합성 데이터 세트에서 값을 확률 적으로 할당하는 방법을 배우려고합니다. 분석 테스트가 견고하고 다른 입력을 반영하는지 테스트하기 위해 값을 확률 적으로 삽입해야합니다. 추가 정보 (별도의 파일에서)가 변경 될 가정으로 작성된 확률의 사전이 통합됩니다. 'buddy'는 일반 할당 속성에 대한 자리 표시 자입니다. 나는 모델 모집단에 대한 객체 지향 접근법을 궁극적으로 배우려하고있다. 그러나이 단계는 적어도 통계 테스트를 배우기 위해 샘플 데이터 집합을 출력하도록한다. @coldspeed는 귀하의 관심과이 포럼에 정말로 감사드립니다! – user426

답변

0

는이

n = 20 
columns = ['Unique_ID', 'Category', 'Age', 'Sex', 'Buddy'] 
df = pd.DataFrame(columns=columns) 

list_category = [1,2,3,4] 
buddy_list = ['buddy_1', 'buddy_2'] 
Sexes = ['female', 'male'] 
df.Sex = np.random.choice(a=Sexes, size=n, p=[0.6, 0.4]) 
df.Category = np.random.choice(list_category, size=n, p=[0.3, 0.4, 0.2, 0.1]) 

d = {1: [0.1, 0.9], 2: [0.3, 0.7], 3: [0.7, 0.3], 4: [0.9, 0.1]} 

for val in list_category: 
    sz = (df["Category"] == val).sum() # find the size for array to create 
    # use `loc` to select places you want to replace 
    df.loc[df["Category"] == val,'Buddy'] = np.random.choice(
               buddy_list, sz, p=d[val]) 
+0

그 트릭을했는지 – user426

+0

여전히 적용하는 방법을 잘 모르지만 (list_category가 바뀔 것으로 예상 함) 정말로 도움을 주셔서 감사합니다. df [ "Category"] == val, 'Buddy'필터가 트릭을했습니다. 정말 고맙습니다. – user426

+0

문제 없습니다. 다행이라고 생각합니다. – Tai