首页 > 解决方案 > 如何在 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

标签: pythonpython-3.xpandasdataframe

解决方案


使用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

推荐阅读