熊猫内条件语句的计算
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了熊猫内条件语句的计算相关的知识,希望对你有一定的参考价值。
过去,我曾经通过pandas数据框进行条件语句的计算,该数据框将Y / N返回1/0,然后计算并获得分数。但是,我想学习高级方法,以实现列表中较大数据集的计算。
这是我的代码:
a=[234,45,57]
b=[26,51,59]
c=[87,23,56]
avrg_score = [['A',a[0]>0],
['B',b[0]>0],
['C',b[0]>0],
['C',a[0]*b[0]>c[0]],]
avrg_score = pd.DataFrame(avrg_score, columns=['Figure','Pass'],dtype=float).round(3)
x=avrg_score.Figure.count()
y=avrg_score.Pass.sum()
avrg_score_result=(x/y)*100
输出:
100
但是这是3个列表(a,b,c)的索引[0]
,但是我需要手动执行列表的其余索引。
如何自动处理给定列表的所有索引?
当我将这样的格式作为完整列表时:
avrg_score = [['A',a>0],
['B',b>0],
['C',b>0],
['C',a*b>c]]
我收到这样的错误:
'>' not supported between instances of 'list' and 'int'
非常感谢您的帮助。
答案
这是您所期望的吗?我假设列表ID A,B,C将成为DataFrame索引和3个列表项中的每一个的列,如“ Pass_1”,“ Pass_2”和“ Pass_3”
import pandas as pd
import inspect
a=[234,45,57]
b=[26,51,59]
c=[87,23,56]
def getname(var):
callers_local_vars = inspect.currentframe().f_back.f_locals.items()
return (str([k for k, v in callers_local_vars if v is var][0]))
lists = [a, b, c]
fig_list = ['A', 'B', 'C']
cols = ['Pass_1','Pass_2','Pass_3']
df_result = pd.DataFrame(columns=cols, dtype=float)
for item in lists:
df_result.loc[getname(item)] = [i>0 for i in item]
print(df_result)
输出:
Pass_1 Pass_2 Pass_3
a 1.0 1.0 1.0
b 1.0 1.0 1.0
c 1.0 1.0 1.0
但是请记住,print_this函数getname()
会检查本地变量,在处理大型列表时可能会很昂贵。相反,我会将列表名称/数据框架索引名称作为字符串列表,并在循环中使用它。
以上是关于熊猫内条件语句的计算的主要内容,如果未能解决你的问题,请参考以下文章