【发布时间】:2020-02-25 19:27:54
【问题描述】:
我有一个要作为列表导入的 csv 文件
[["df['EPS Rating']>=97"],
["df['RS Rating']>=97"],
["df['Ind Group RS']<=9"],
["df['SMR Rating']<=2"],
["df['AD Rating']<=9"],
["df['Comp Rating']>=85"],
["df['Current Price']>=15"]]
我想像这样将这些分配给变量 c1 到 c7
c1 = df['EPS Rating']>=97
c2 = df['RS Rating']>=97
c3 = df['Ind Group RS']<=9
c4 = df['SMR Rating']<=2
c5 = df['AD Rating']<=9
c6 = df['Comp Rating']>=85
c7 = df['Current Price']>=15
这样我就可以使用 Gecko here 找到的这个出色的解决方案,如下所示。虽然这个解决方案在我的情况下非常适合可读性,但它最终会变得很大,因为我有 30 多个这样的过滤器,而且许多有超过 20 个条件。如何将列表中的字符串分配给变量?
可能是这样的吗?
For i to end_of_list:
c[i] = [i].value
我希望这能解释我想要做什么。我是 python 新手,所以我还是有点迷茫。我不喜欢这个想法,所以如果有人有更好的解决方案,我很想知道。谢谢
Geckos 原始解决方案:
import numpy as np
import functools
def conjunction(*conditions):
return functools.reduce(np.logical_and, conditions)
c_1 = data.col1 == True
c_2 = data.col2 < 64
c_3 = data.col3 != 4
data_filtered = data[conjunction(c1,c2,c3)]
【问题讨论】:
-
为什么需要存储到变量中?
-
以便它们可以与 Gecko 的原始解决方案一起使用
-
我在这里看到的问题是,在您的情况下,您将数据帧表达式列表作为字符串导入,并且在您发布的解决方案中,
conjuction函数被应用于这些表达式的求值。在您的情况下,实际的 DataFrame 对象是如何计算的?
标签: python pandas dataframe variables filter