python - Pandas 数据条件映射最佳实践
问题描述
我有来自多个来源的数据,其中混合了数据如何映射到分类值的规则。我不知道在熊猫中做到这一点的最佳方法。.eval
与 I 结合使用可以.loc
做出一些相当复杂的表达式。
- 有没有
C
在评估表达式中分配的方法? - 这是一个坏主意吗?
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
解决方案
如果它是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)
现在将x
and替换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
被选中 wherecondlist[0]
isTrue
,b
被选中 whenother_cond
isTrue
,同理 foranother_cond
。中的条件
condlist
可以相互包含,则首先满足被选中,它对应的值来自choicelist
default_value
中提及的条件均不存在时condlist
选择True
。
推荐阅读
- mxgraph - 如何防止 mxGraph GraphEditor 自动将蓝色应用于加载的图表
- python - 试图从 JSON URL 中提取数据到 Pandas
- vue.js - 如何在单个 ag-grid 单元格中显示两列值?
- git - Git diff 所有本地更改,无论哪个提交或暂存/未暂存
- javascript - 尝试在 vuejs 中重新渲染广告
- r - 使用 dplyr 和列中的一些条件创建一个新的数据框
- android - Nearby Connections API 的连接时间是否有下限?
- r - 当我尝试在 R 中安装 Mosaic 包时,这个错误是什么意思?
- ios - 在 Sirikit 中创建自定义类型参数
- swift - 如何将 Firebase 中的值添加到 xcode 中的标签?