【问题标题】:calculation of conditional statement within pandas [duplicate]pandas中条件语句的计算[重复]
【发布时间】:2020-06-18 10:18:58
【问题描述】:

过去我曾经通过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'

不胜感激。

【问题讨论】:

  • DataFrame 中所有索引的列是什么?我假设列表 ID A、B、C 将成为 DataFrame 索引
  • 我相信标记的问题涵盖了您尝试实施的原则。这包含在许多 PANDAS 教程中,但这个序列比您目前可能想要的更远。

标签: python pandas


【解决方案1】:

这是您所期待的吗?我假设列表 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() 会检查本地变量,在处理大型列表时可能会很昂贵。相反,我会将列表名称/数据帧索引名称作为字符串列表并在循环中使用它。

【讨论】:

  • 您的代码适用于 i>0,但我不能给出列表不同的条件,例如列表 a 中的所有索引超过 20,b 超过 30,a>b 中的所有索引都在 a 和C。该怎么做?
  • @Nina 我不确定我是否理解您的要求。基于原始问题,我假设对于具有 3 个元素的列表 a,您想要找出每个元素都大于 0 并将其存储在 df 列中。因此,如果您的列表有 3 个元素,那么您的数据框中就有 3 列(每个元素一个)。现在您想如何存储合并在一列中的 3 个元素的结果?您是要检查列表中的每个元素是否大于 0 并将结果存储在一列中,还是计算列表中所有大于 0 的元素并将总和存储在结果 df 列中?
猜你喜欢
  • 2016-12-17
  • 1970-01-01
  • 2022-01-21
  • 2013-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2021-05-10
相关资源
最近更新 更多