python - 如何使用 python apply/lambda/shift 函数根据 2 列的值获取该特定列的前一行值?
问题描述
我有 2 列(FN1 和 FN2),基于这些我必须再创建一个列(最终)
FN1 FN2 Final
False False 1
True True 1
False False 1
True False 2
True True 2
False False 1
True True 1
True True 1
如果 FN1 为 False,Final 将为 1。
如果 FN2 为 True,我将是 Final 的先前值。
但是如果 FN2 是 False 我需要用 Final +1 的前一个值更新它(即递增 1)
. 我尝试使用shift()
但在这种情况下再次没有帮助。
FN1 FN2 Final
False False 1
True True 1
False False 1
True False 2
True True 2
False False 1
True True 1
True True 1
.
解决方案
使用np.select
:
df1 = df.shift()
cond1 = df['FN1'] == False
cond2 = (df['FN1']==True) & (df['FN2'] ==True)
cond3 = (df['FN1']==True) & (df['FN2'] == False)
df['Final'] = np.select([cond1,cond2,cond3], [1, df1['Final'], df1['Final']+1])
print(df)
推荐阅读
- mongodb - 使用 Spring 和 DateFromString 在日期上构建聚合操作
- c# - HtmlAgilityPack - 从表中选择 td 属性
- java - 如何将服务器的最新响应放入我的数组列表中?
- xpath - 如何在 DevTools 控制台中使用 xpath 计算搜索结果中所有 YouTube 直播的总观看次数?
- nlp - Tamarian 语言的上下文无关语法
- gnupg - 如何在 GnuPG 中使用简单的 s2k 导出私钥?
- php - 将php函数转换为kotlin
- opendaylight - ODL中的前缀分片是什么?
- c++ - Querying Windows display scaling
- android - 在安装前检查安卓应用程序是否是恶意软件