python - 比较来自相同熊猫数据框的 2 列的值并根据比较返回第 3 列的值
问题描述
我正在尝试比较同一 pandas 数据框中的 2 列之间的值,并且对于找到匹配项的位置,我想从该行返回值,但从第 3 列返回值。
基本上如果以下是数据框df
| date | date_new | category | value |
| --------- | ---------- | -------- | ------ |
|2016-05-11 | 2018-05-15 | day | 1000.0 |
|2020-03-28 | 2018-05-11 | night | 2220.1 |
|2018-05-15 | 2020-03-28 | day | 142.8 |
|2018-05-11 | 2019-01-29 | night | 1832.9 |
我想添加一个新列,value_new
它基本上是通过value
在比较每个日期值的date_new
每个日期值之后获取值,date
然后比较两行是否具有相同的category
值。
[转换步骤]
- 1. 为每个值date_new
寻找匹配date
- 2. 如果找到匹配,比较category
列中的值是否也匹配- 3. 如果上述步骤中的两个匹配都满足,从列中
选择相应的值value
两个匹配项都满足的行,否则留空。
所以,我最终希望最终的数据框看起来像这样。
| date | date_new | category | value | value_new |
| --------- | ---------- | -------- | ------ | --------- |
|2016-05-11 | 2018-05-15 | day | 1000.0 | 142.8 |
|2020-03-28 | 2018-05-11 | night | 2220.1 | 1832.9 |
|2018-05-15 | 2020-03-28 | day | 142.8 | None |
|2018-05-11 | 2016-05-11 | day | 1832.9 | 1000.0 |
解决方案
DataFrame.merge
与左连接和分配的新列一起使用:
df['value_new'] = df.merge(df,
left_on=['date_new','category'],
right_on=['date','category'], how='left')['value_y']
print (df)
date date_new category value value_new
0 2016-05-11 2018-05-15 day 1000.0 142.8
1 2020-03-28 2018-05-11 night 2220.1 NaN
2 2018-05-15 2020-03-28 day 142.8 NaN
3 2018-05-11 2016-05-11 day 1832.9 1000.0
推荐阅读
- .net - F# 不支持 '\0' 是否有原因?
- python - 在 Windows 上获取窗口、移动和调整大小
- javascript - 尝试使用 cypress 单击“注册”按钮后进入弹出窗口(注册)表单
- android - 请求缺少所需的身份验证凭据。预期的 OAuth 2 访问令牌
- python - 怎么修
错误? - java - 处理两个不同文件扩展名的正则表达式
- composer-php - 我可以清理/删除本地 Composer 目录吗?
- javascript - Typescript 或 babel 插件将 ES6 类转换为使用作用域变量作为私有属性模式的函数
- java - Java:在没有 Passay 和 VT-Password 库的情况下验证键盘序列规则
- symfony - 在 Symfony 中的 beforeSend 函数中获取 rootDir 以拦截 Sentry 事件