2016-04-17 15 views
3

Ich habe eine 2 Datenrahmen One-Score-Karte für die Bewertung von Schüler Noten Zweiten One-Student-Datensatz.Referenzieren einer Liste von Listen

Ich möchte Scorekarte auf einen bestimmten Student-Datensatz anwenden, um die Punkte zu berechnen und sie zu aggregieren. Ich versuche, eine generische Funktion devlop, die die Zählkarte und gilt auf jedem studentmarks Dataset

import pandas as pd 
score_card_data = { 
     'subject_id': ['MATHS', 'SCIENCE', 'ARTS'], 
     'bin_list': [[0,25,50,75,100], [0,20,40,60,80,100], [0,20,40,60,80,100]], 
     'bin_value': [[1,2,3,4], [1,2,3,4,5], [3,4,5,6,7] ]} 
score_card_data = pd.DataFrame(score_card_data, columns = ['subject_id', 'bin_list', 'bin_value']) 
score_card_data 

student_scores = { 
     'STUDENT_ID': ['S1', 'S2', 'S3','S4','S5'], 
     'MATH_MARKS': [10,15,25,65,75], 
     'SCIENCE_MARKS': [8,15,20,35,85], 
     'ARTS_MARKS':[55,90,95,88,99]} 
student_scores = pd.DataFrame(student_scores, columns = ['STUDENT_ID', 'MATH_MARKS', 'SCIENCE_MARKS','ARTS_MARKS']) 
student_scores 

Funktionen definieren Bins Nehmen, um die Behälter über Spalten

bins = list(score_card_data.loc[score_card_data['subject_id'] == 'MATHS', 'bin_list']) 
student_scores['MATH_SCORE'] = pd.cut(student_scores['MATH_MARKS'],bins, labels='MATHS_MARKS') 

Error:ValueError: object too deep for desired array 

Ich versuche, nimmt zu wandle den cellvalue in einen String um und er wird als Objekt erkannt. Jede Art zu lösen

Wie kann ich die Funktion allgemeiner machen?

Dank Pari

Antwort

0

Sie können bins[0] nur verwenden, um die list, zu extrahieren, die sonst die ValueError aufwirft:

bins[0] 
[0, 25, 50, 75, 100] 

type(bins[0]) 
<class 'list'> 

student_scores['MATH_SCORE'] = pd.cut(student_scores['MATH_MARKS'], bins[0]) 

    STUDENT_ID MATH_MARKS SCIENCE_MARKS ARTS_MARKS MATH_SCORE 
0   S1   10    8   55 (0, 25] 
1   S2   15    15   90 (0, 25] 
2   S3   25    20   95 (0, 25] 
3   S4   65    35   88 (50, 75] 
4   S5   75    85   99 (50, 75] 

ich die labels verlassen, weil Sie eine Liste von vier zur Verfügung zu stellen müssen Die dort angegebenen Beschriftungen haben fünf Cutoffs/Bin-Kanten.

Verwandte Themen