在过去,我经常通过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)的index[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将是“Pass_1”、“Pass_2”和“Pass_3”这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()
检查局部变量,在处理大型列表时可能会花费高昂的成本。相反,我将列表名/数据帧索引名作为字符串列表,并在循环中使用它。
我有以下html代码片段: 我只想在存在(至少具有on字符)。 现在,即使没有字符串,它也会显示图标。 有什么办法吗?
我想对两列使用不同的条件来聚合行。 当我做,我得到输出1 当我做时,我得到输出2 是否有一种方法可以进行聚合,将输出1显示到,将输出2显示到?
我试图开发以下过滤器与熊猫数据帧: 我有四列,,,和 如何将其作为聚合函数编写? 下面是一个编写效率低下的工作示例: 输出:
问题内容: 现在,我知道如何检查数据框中多列中的特定值。但是,我似乎无法弄清楚如何基于布尔响应执行if语句。 例如: 使用和遍历目录并将特定文件读入数据框。 现在检查跨多个列的数据框。第一个值是列名(column1),下一个值是我在该列(香蕉)中寻找的特定值。然后,我正在检查另一列(column2)的特定值(绿色)。如果这两个都是正确的,我想执行一项特定的任务。但是,如果它是错误的,我想做其他事情
相当新的反应,我相信这很容易,但我正在尝试转换: 转换成单个返回语句。 基本上是替换
问题内容: 如何将条件逻辑应用于Pandas DataFrame。 请参见下面显示的DataFrame, 我的原始数据显示在“数据”列中,并且期望的输出显示在其旁边。如果“数据”中的数字小于2.5,则所需的输出为False。 我可以应用循环并重新构建DataFrame …但是那是“非Python的” 问题答案: 只需将列与该值进行比较: