【问题标题】:Python/Pandas: dataframe merge and fillnaPython/Pandas:数据框合并和填充
【发布时间】:2021-11-14 19:45:11
【问题描述】:

我尝试根据日期合并两个 Pandas 数据框,然后填充 NaN 值直到特定日期。我有以下数据示例:

df_1:

date value1
01/12 10
02/12 20
03/12 30
04/12 40
05/12 60
06/12 70
07/12 80

df_2:

date value2
01/12 100
03/12 300
05/12 500

我使用以下行: df = pd.merge((df_1,df_2, how='left', on=['date']

我明白了:

date value1 value2
01/12 10 100
02/12 20 NaN
03/12 30 300
04/12 40 Nan
05/12 50 500
06/12 60 NaN
07/12 70 NaN

然后我想要实现的是将df['value2'] 中的NaN 值转发到05/12,而不是直到07/12

【问题讨论】:

  • 你所说的'forwardfill'是什么意思?数据框需要每个行列组合的条目,如果没有值,我认为您会遇到 NaN。如果您想为 6/12 之后的日期将特定值设置为 value2,您可以这样做,但如果您对 NaN 不满意,则必须选择这些值。
  • 对于“value2”,它应该如下所示:100,100,300,300,500,500,NaN,NaN。基本上使用 fillna(method='ffill') 但直到 05/12。但是使用 fillna() 它将填充 NaN 值直到数据帧结束(07/12)
  • @kobo 如果对您有帮助,请批准该解决方案:D

标签: python pandas dataframe nan ffill


【解决方案1】:

首先,将日期转换为datetime 格式以使用条件操作数。默认返回 YYYY-MM-DD。

接下来,为您的条件创建一个掩码 ffill05/12。并将loc 用于fillna

最后,将datedatetime转换回string

df['date'] = pd.to_datetime(df["date"], format="%d/%m")
mask = (df["date"].lt(pd.to_datetime('05/12', format="%d/%m")))
df.loc[mask, "val2"] = df.loc[mask, "val2"].fillna(method="ffill")
df['date'] = df['date'].dt.strftime('%d/%m')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 2013-06-10
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 2021-06-25
    相关资源
    最近更新 更多