我有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
答案 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