繁体   English   中英

为熊猫数据框应用跨行滚动中位数

[英]Applying rolling median across row for pandas dataframe

我想应用滚动中位数来替换以下数据框中的 NaN 值,窗口大小为 3:

 1990      1991      1992      1993      1994      1995      1996      1997      1998      1999      2000      2001      2002      2003      2004  ...      2007      2008      2009       2010       2011       2012       2013       2014       2015       2016       2017       2018       2019  2020  2021

17  366000.0  278000.0  330000.0  NaN  434000.0  470600.0  433000.0  456000.0  556300.0  580200.0  635300.0  690600.0  800000.0  NaN  821500.0  ...  850800.0  905000.0  947500.0  1016500.0  1043900.0  1112800.0  1281900.0  1312700.0  1422000.0  1526900.0  1580000.0  1599000.0  1580000.0   NaN   NaN

然而,熊猫rolling功能似乎适用于列而不是一行。 我怎样才能解决这个问题? 此外,解决方案不应更改该行中的任何非 NAN 值

首先通过使用带有axis=1 (按行)、 min_periods=0 (处理NaN )和closed='both' (否则左边缘被排除)的rolling()计算滚动中位数。

然后使用fillna()这些中位数替换NaN条目。

medians = df.rolling(3, min_periods=0, closed='both', axis=1).median()
df = df.fillna(medians)

#         1990      1991      1992      1993      1994      1995      1996      1997      1998      1999  ...       2012       2013       2014       2015       2016       2017       2018       2019       2020       2021
# 17  366000.0  278000.0  330000.0  330000.0  434000.0  470600.0  433000.0  456000.0  556300.0  580200.0  ...  1112800.0  1281900.0  1312700.0  1422000.0  1526900.0  1580000.0  1599000.0  1580000.0  1580000.0  1589500.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM