![](/img/trans.png)
[英]pandas Dataframe Replace NaN values with with previous value based on a key column
[英]Replace missing values in Pandas with previous value if not NAN
我需要您對以下代碼的幫助。 我有 df1 和我試圖與 df2 合並的匯率和日期列。 df1 缺少匯率值(周末和節假日)。 對於周末匯率值,我想使用最后一個可用值(例如,如果 2019-05-01 的匯率為 nan,我希望它使用 2019-04-01 匯率值)。 我嘗試了兩種選擇但沒有成功:
這是兩個數據幀(如果你復制並粘貼它,你會得到一個錯誤,即時間戳名稱無法識別。我無法獲得將它粘貼到這里的日期值,因為我總是將日期值作為時間戳對象)。 我希望你能幫我解決這兩種方法,因為我相信知道它會很有用。
df1={'Fecha': {0: Timestamp('2019-01-01 00:00:00'),
1: Timestamp('2019-01-02 00:00:00'),
2: Timestamp('2019-01-03 00:00:00'),
3: Timestamp('2019-01-04 00:00:00'),
4: Timestamp('2019-01-05 00:00:00'),
5: Timestamp('2019-01-06 00:00:00'),
6: Timestamp('2019-01-07 00:00:00'),
7: Timestamp('2019-01-08 00:00:00'),
8: Timestamp('2019-01-09 00:00:00'),
9: Timestamp('2019-01-10 00:00:00')},
'ER': {0: nan,
1: 19.1098,
2: 19.2978,
3: 19.2169,
4: nan,
5: nan,
6: 19.076,
7: 19.1627,
8: nan,
9: 19.7792}}
df2={'Fecha': {0: Timestamp('2019-01-01 00:00:00'),
1: Timestamp('2019-01-02 00:00:00'),
2: Timestamp('2019-01-03 00:00:00'),
3: Timestamp('2019-01-04 00:00:00'),
4: Timestamp('2019-01-05 00:00:00'),
5: Timestamp('2019-01-06 00:00:00'),
6: Timestamp('2019-01-07 00:00:00'),
7: Timestamp('2019-01-08 00:00:00'),
8: Timestamp('2019-01-09 00:00:00'),
9: Timestamp('2019-01-10 00:00:00')},
'letters': {0: "a",
1: "b",
2: "c",
3: "d",
4: "e",
5: "f",
6: "g",
7: "h",
8: "i",
9: "j"}}
多謝!
我認為您不需要 lambda(正如您在評論中提到的)。 您想要實現的目標可以通過.ffill
方法完成:
>>> df1["ER"].ffill()
0 NaN
1 19.1098
2 19.2978
3 19.2169
4 19.2169
5 19.2169
6 19.0760
7 19.1627
8 19.1627
9 19.7792
Name: ER, dtype: float64
要合並兩個數據幀,請使用pd.merge
:
>>> df1["ER"].ffill(inplace=True)
>>> pd.merge(df1, df2, on="Fecha")
Fecha ER letters
0 2019-01-01 NaN a
1 2019-01-02 19.1098 b
2 2019-01-03 19.2978 c
3 2019-01-04 19.2169 d
4 2019-01-05 19.2169 e
5 2019-01-06 19.2169 f
6 2019-01-07 19.0760 g
7 2019-01-08 19.1627 h
8 2019-01-09 19.1627 i
9 2019-01-10 19.7792 j
僅用於一般知識:在您示例的數據中,它會因無法識別的“時間戳”和“nan”而引發錯誤。 要使此數據集可用,您只需在 de Timestamp 之前添加pandas
或pd
:
pd.Timestamp('2019-01-06 00:00:00')
對於指示空值,您可以使用:
# First option - pandas system
import pandas as pd
{0: pd.NA}
# Second option - numpy system
import numpy as np
{0: np.nan}
# Third oprtion - Pure python
{0: None}
我找到了一種使用 pd.merge_asof() 函數來實現這一點的方法。 如果它沒有找到要合並的鍵值,它會給你前一個。 不過,排序很重要。
它的工作原理與 excel 查找一樣(不是 VLOOK UP,而是 LOOKUP - 沒有 v 或 h-)。
謝謝大家!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.