Pandas数据条件映射最佳实践



我有来自多个来源的数据,其中包含了如何将数据映射到分类值的规则。我不知道在熊猫身上做这件事的最佳方法。将CCD_ 1与CCD_。

  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

如果要输出01,则使用将布尔掩码强制转换为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)现在用您认为合适的值替换x.eval0。当满足cond时,x的值将被usd,否则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被选择,其中condlist[0]True,当other_cond.loc0时b被选择,对于another_cond也是如此。

  • condlist中的条件可以是互斥的,然后选择第一个满足,它的对应值来自choicelist

  • 当CCD_ 25中提到的条件都不是CCD_ 26时,选择CCD_。

最新更新