pandas 基于具有阈值和操作符号的基于规则的表的优化 Dataframe 过滤

a64a0gku  于 2022-12-09  发布在  其他
关注(0)|答案(1)|浏览(136)

网格表定义筛选规则。网格表的行与第二个表的ColA相对应,而网格表的列与第二个表的ColB相对应。目标:如果ColA和ColB的组合福尔斯在网格表中值为1的区间内,则我希望在第二个表中创建值为1的新列,否则为零。

import pandas as pd 
grids= pd.DataFrame(data = {"<0.1": [0,0,0,1], "<0.2": [0,0,1,1], ">=0.2": [0,0,1,0]}, index=["<0.1", "<0.2","<0.3", ">=0.3" ] ) 
df = pd.DataFrame({"ColA": [0.01, 0.15, 0.24, 0.5], "ColB": [0.15, 0.15, 0.24, 0.5]})

输出应类似于'

目前,我已经用for循环做了一个非常大的函数。有什么想法如何用Pandas或其他技巧来优化它吗?

zpgglvta

zpgglvta1#

也许不是个好办法。但我有两点意见:

df['Flag'] = ''
for m in range(len(df)):
  row_idx = [n for n,x in enumerate([eval(i) for i in list(str(df['ColA'][m]) + grids.index)]) if x]
  col_idx = [n for n,x in enumerate([eval(i) for i in list(str(df['ColB'][m]) + grids.columns)]) if x]

  df['Flag'][m] = 1 if (grids.iloc[row_idx, col_idx] == 1).values.any() else 0

相关问题