我的資料框 df 中有三列,“日期”、“名稱”和“值”。
“日期”和“名稱”組合是唯一的,即沒有兩行具有相同的日期名稱組合。
我想創建一個新列(“昨天值”),該列由相關行前一天的特定“名稱”的“值”填充(請假設資料框沒有以任何方式排序)。
首先,我設法使用以下方法創建了一個“昨天日期”列:
from datetime import timedelta
delta = timedelta(days=-1)
df["Date"] = pd.to_datetime(df["Date"])
df["Yesterday Date"] = df(lambda x: x["Date"] delta, axis=1)
除此之外,我幾乎被困住了。我曾嘗試使用 apply 方法,但無法弄清楚如何使用它。我懷疑正確的解決方案將需要某種排序,然后呼叫 shift 方法,但我感到困惑,因為“日期”列不僅僅包含唯一值(因為它是唯一的日期和名稱組合)。也許這里需要某種組功能,但我在那里非常不了解。
只是為了澄清一下,對于給定的行,解決方案應該讀取日期和名稱,計算昨天的日期并用與名稱和昨天的日期對應的值填寫新列。
uj5u.com熱心網友回復:
假設您有一個 DataFrame,它按每個 name 的日期排序:
df = pd.DataFrame({'date':[datetime.date(2022, 10, 10), datetime.date(2022, 10, 11)]*2,
'name':['a','a','b','b'],
'value':[1.,2.,3.,4.]})
date name value
0 2022-10-10 a 1.0
1 2022-10-11 a 2.0
2 2022-10-10 b 3.0
3 2022-10-11 b 4.0
您可以按名稱和班次分組:
df['last_value'] = df.groupby(['name'])['value'].shift(1)
date name value last_value
0 2022-10-10 a 1.0 NaN
1 2022-10-11 a 2.0 1.0
2 2022-10-10 b 3.0 NaN
3 2022-10-11 b 4.0 3.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/521388.html
下一篇:每天在“真”或“假”之間交替
