从列表列表中引用列表
Posted
技术标签:
【中文标题】从列表列表中引用列表【英文标题】:Referencing a list from list of lists 【发布时间】:2016-08-09 13:18:48 【问题描述】:我有 2 个数据框 用于评分学生分数的一张记分卡 第二个学生数据集。
我想在给定的学生数据集上应用记分卡来计算分数并汇总它们。我正在尝试开发一个通用函数,该函数采用 记分卡并适用于任何学生标记数据集
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
函数 定义箱 将 bin 应用到列上
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
我正在尝试将 cellvalue 转换为字符串,并且它被检测为对象。有什么办法解决
如何使函数更通用?
谢谢 帕里
【问题讨论】:
【参考方案1】:您可以只使用bins[0]
来提取list
,否则会引发ValueError
:
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]
我省略了labels
,因为您需要提供一个包含四个标签的列表,因为有五个截止点/bin 边缘。
【讨论】:
以上是关于从列表列表中引用列表的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 2 中,无论列表的内容如何,如何按值而不是引用复制复杂嵌套元素的列表