python - 根据先前列中满足的某些条件在数据框中创建新列
问题描述
我想根据某个值是否接踵而至,在数据框中创建一个新列。示例我的df看起来像:
编辑:(值可以包含(A,N,E,V))
Name Jan Feb Mar April
John N N E E
Alex E E E E
Alice E E E N
如果有人从前几个月的“N”值更改为“E”,则我希望有一个新的“指定”列返回 1,如果有其他情况,则返回“0”。本质上,这个数据框来自一个每月更新的 excel 文件,因此最新的月份将出现在最后一列中。
我有一个代码
def func(u,x,y,z):
if u =='N' and x== 'E':
return 1
elif x =='N' and y == 'E':
return 1
elif y =='N' and z == 'E':
return 1
else:
return 0
本质上,我想要一个不需要每个月都更新的代码,并且可以只使用列索引来返回值。
解决方案
与右移的相同数据帧进行比较。由于 'N' > 'E',转换为 int 将生成你想要的
>>> df = pd.DataFrame({'Jan': list('NEE'), 'Feb': list('NEE'), 'Mar': 'E', 'April': list('EEN')})
>>> df
Jan Feb Mar April
0 N N E E
1 E E E E
2 E E E N
>>> (df < df.shift(1, axis=1)).astype(int)
Jan Feb Mar April
0 0 0 1 0
1 0 0 0 0
2 0 0 0 0
如果您只想对最后一列执行相同操作,只需
(df.iloc[:, -1] < df.iloc[:, -2]).astype(int)
UPD:如果有其他字母,应该是:
(( df.shift(1, axis=1) == 'N') & (df == 'E')).astype(int)
或者,对于单个列:
((df.iloc[:, -2] == 'N') & (df.iloc[:, -1] == 'E')).astype(int)
推荐阅读
- flutter - 在颤动中从 DateTime 类中获取意外日期
- python - 如何在 python 中使用可搜索文本向 PDF 添加 URL?
- android - 如何在 Google Play 中查看哪个用户上传了 apk 文件?
- java - 字符串行未在输出屏幕中打印。错误是什么
- java - 是否可以从线程调用接口函数?
- php - 当我尝试在 127.0.0.1:8080 上加载 PerchCMS(或任何页面)时,浏览器超时
- html - HTML:无法在子文件夹的子文件夹中显示图像文件(棘手)
- javascript - 从同一个类的另一个函数调用一个类的函数
- android - 如何使用 kotlin 扫描蓝牙设备
- android - Java 8 和注解处理器