首页 > 解决方案 > Pandas 数据条件映射最佳实践

问题描述

我有来自多个来源的数据,其中混合了数据如何映射到分类值的规则。我不知道在熊猫中做到这一点的最佳方法。.eval与 I 结合使用可以.loc做出一些相当复杂的表达式。

  1. 有没有C在评估表达式中分配的方法?
  2. 这是一个坏主意吗?
df = pd.DataFrame({"A" : [1,2,3,4,5], "B" : [0, 1, 0, 1, 0], "Z" : [3, 2, 2, 1, 5]})
df["C"] = 0

x = df.eval("(A > 2) & (B == 0)")
df.loc[x, "C"] = 1

x = df.eval("(C == 0) & (B == 0) & (Z > 0)")
df.loc[x, "C"] = 2

df

    A   B   Z   C
0   1   0   3   2
1   2   1   2   0
2   3   0   2   1
3   4   1   1   0
4   5   0   5   1

标签: pythonpandas

解决方案


如果它是0并且1您想要作为输出,则使用将布尔掩码转换为int

#df['C'] = 0 is redundant in this case
df['C'] = (df.A.gt(2) & df.B.eq(0)).astype(int)

你可以np.where在这里使用。

df['C'] = np.where(df.A.gt(2)&df.B.eq(0), 1, 0)
  • np.where(cond, x, y)现在将xand替换y为您认为合适的值。的值x将在cond满足时使用,否则的值y

如果您有多个与该条件对应的条件输出,请使用np.select.

condlist = [df.A.gt(2)&df.B.eq(0), other_cond, another_cond]
choicelist = ['a', 'b', 'c']
df['C'] = np.select(condlist, choicelist, default_value)
  • a被选中 where condlist[0]is Trueb被选中 when other_condis True,同理 for another_cond

  • 中的条件condlist可以相互包含,则首先满足被选中,它对应的值来自choicelist

  • default_value中提及的条件均不存在时condlist选择True


推荐阅读