根据每个ID的最新值在Pandas数据框中创建新列

时间:2020-03-12 14:22:56

标签: python pandas dataframe

我有df,在其下我已经根据ID变量和时间变量T进行了次级排序。

df = pd.DataFrame({
    'ID': ['a', 'b', 'c', 'b', 'b'],
    'T': [
        datetime.datetime(2019, 1, 1),
        datetime.datetime(2017, 1, 1),
        datetime.datetime(2018, 1, 1),
        datetime.datetime(2020, 1, 1),
        datetime.datetime(2021, 1, 1)],
    'V': [3, 5, 8, 6, 1]
}).sort_values(['ID', 'T'], ascending=False)

df

    ID  T           V
2   c   2018-01-01  8
4   b   2021-01-01  1
3   b   2020-01-01  6
1   b   2017-01-01  5
0   a   2019-01-01  3

我想添加一个新列V_L,其中对于每个ID,显示最后一个值(基于时间列T)。如果没有最后一个值,则应在null中用V_L值表示。输出示例如下:

df
    ID  T           V   V_L
0   a   2018-01-01  8   NaN
1   b   2021-01-01  1   6.0
2   b   2020-01-01  6   5.0
3   b   2017-01-01  5   NaN
4   c   2019-01-01  3   NaN

1 个答案:

答案 0 :(得分:1)

IIUC

df['V_L'] = df.groupby('ID').V.shift(-1)
df
Out[350]: 
  ID           T  V  V_L
2  c  2018-01-01  8  NaN
4  b  2021-01-01  1  6.0
3  b  2020-01-01  6  5.0
1  b  2017-01-01  5  NaN
0  a  2019-01-01  3  NaN