python - 如何在 DataFrame 中添加具有来自另一个原始值的列
问题描述
我有以下数据框:
DATE TIME Value
0 20200103 100500 255
1 20200103 101000 356
2 20200103 101500 546
3 20200104 100500 652
4 20200104 101000 321
5 20200104 101500 632
我想根据以下规则接收一个新列:
X = 值,其中 DATE == DATE 和 TIME == (TIME - 500)
我想得到什么:
DATE TIME Value Х
0 20200103 100500 255 Nan
1 20200103 101000 356 255
2 20200103 101500 546 356
3 20200104 100500 652 Nan
4 20200104 101000 321 652
5 20200104 101500 632 321
我尝试了什么:
以下代码返回所有 X 的 Nan 值:
df['X'] = df.query("DATE == DATE & TIME == (TIME - 500)").Value
解决方案
使用np.where()
和.shift()
:
import pandas as pd, numpy as np
df['X'] = np.where((df['DATE'] == df.shift(1)['DATE']) &
(df['TIME'] == df.shift(1)['TIME'] + 500),
df.shift(1)['Value'],
np.nan)
df
输出:
DATE TIME Value X
0 20200103 100500 255 NaN
1 20200103 101000 356 255.0
2 20200103 101500 546 356.0
3 20200104 100500 652 NaN
4 20200104 101000 321 652.0
5 20200104 101500 632 321.0
推荐阅读
- javascript - 正则表达式验证主题标签 (#),忽略包含锚 (#) 的 URL
- xml - 如何绘制由 IAR Embedded Workbench 生成的 xml 调用图?
- json - Debezium Connector for PostgreSQL 在 JSON 类型的主题数据中引入 \
- c# - UWP Kiosk 模式在 F: 驱动器中打开 FileOpenPicker
- r - 提取公式括号内的信息
- java - 使用 ResponseEntity 获取 Http 响应
- c - 在 C 中的多维数组中添加行和列
- rabbitmq - Azure 服务总线、AWS SNS、RabbitMQ -> 所有订阅者都收到消息?
- java - 在新 IDE 中读取 JSON 文件失败
- c# - 每当用户请求更改密码或由用户管理器自动处理时,我是否必须手动更新安全标记?