python - 基于不同行条件的新数据框列
问题描述
我很困。我正在尝试根据某些条件创建一个新列,但条件基于不同的行。
这是我的原始数据的示例:
唯一标识符 | 第一年 | 第 2 年 |
---|---|---|
一个 | 2017 | |
一个 | 2018 | |
一个 | 2018 | |
一个 | 2019 | |
b | 2016 年 | |
b | 2018 | |
b | 2016 年 |
我希望创建的是一个表,用于标记 year1 和 year2 之间的匹配,但基于 Unique_Identifyer。这就是我的意思:
唯一标识符 | 第一年 | 第 2 年 | 匹配? |
---|---|---|---|
一个 | 2017 | 不 | |
一个 | 2018 | 是的 | |
一个 | 2018 | 是的 | |
一个 | 2019 | 不 | |
b | 2016 年 | 是的 | |
b | 2018 | 不 | |
b | 2016 年 | 是的 |
结果本身不需要采用这种格式,因为我的目标实际上是显示每个唯一标识符的匹配年份。
提前致谢
解决方案
您可以检查两个列中的共同年份,然后您可以使用np.where
.
尝试:
import numpy as np
def check_year(x):
intersect = np.intersect1d(x['year1'].values, x['year2'].values)
x['Match'] = np.where((x['year1'].isin(intersect) | x['year2'].isin(intersect)),'Yes','No')
return x
df = df.groupby('Unique_Identifier').apply(check_year)
输出:
Unique_Identifier year1 year2 Match
0 a <NA> 2017 No
1 a <NA> 2018 Yes
2 a 2018 <NA> Yes
3 a 2019 <NA> No
4 b <NA> 2016 Yes
5 b <NA> 2018 No
6 b 2016 <NA> Yes
推荐阅读
- visual-studio - 构建后事件命令行:xcopy ERROR
- elasticsearch - 无法在弹性 7.5.1 中启动 Packetbeat
- jquery - 如何制作平滑的块外观?
- javascript - 根据单选按钮选择打开下拉菜单
- java - 防止 Spring Boot 缓存文件
- javascript - List.js 搜索对象?
- java - 使用 tess4j 库的 Tesseract OCR
- ubuntu-16.04 - ROS-Kinetic:无效标签:无法加载命令参数:命令返回代码 [1]
- javascript - 列表中新添加的项目不是 React 中的重新渲染组件
- android - 无法使用 MultiDex 启用 facebook 登录