0
我有一個從外部數據創建和粗略看起來像這樣添加列使用多指數數據幀值
df = pandas.DataFrame([(5, 5821, 5),
(5, 5819, 6),
(5, 5818, 7),
(6, 5818, 12),
(7, 119, 20),
(7, 118, 0),
(7, 116, 11),
(7, 115, 15),
(7, 114, 17)],
columns=(('ID', 'SUBID', 'VALUE'))).set_index(['ID', 'SUBID'])
我需要保存的VALUE
當前行的值的新列PREV_VALUE
一個數據幀(ID, SUBID - 1)
。也就是說
VALUE PREV_VALUE
ID SUBID
5 5821 5 NaN
5819 6 7
5818 7 NaN
6 5818 12 NaN
7 119 20 0
118 0 NaN
116 11 15
115 15 17
114 17 NaN
我可以矇混我的方式,通過使用df['PREV_VALUE'] = df.apply(lambda r: df.VALUE.get((r.name[0], r.name[1]-1), None), axis=1)
,這是大dataframes可怕的慢,雖然。有什麼想法嗎?
需要說明的不是從我的例子清楚的是,'SUBID'可能有漏洞。這就是'SUBID'可能是類似於「5821,5820,5818」。 5820行需要是'NaN',因爲缺少5819。用'shift()','5818'的值會被拾取。 – user2722968
@ user2722968,你可以發佈一個可重現的數據集和所需的數據集? – MaxU
用更復雜的例子更新了這個問題。 – user2722968