如您所知,有很多空白。我想向前传播非空值(例如,在第一行 1029 转到 1963.02.12 列,在 1029 和1043),但只到最后一个条目,也就是说,当它遇到最后一个非空值时,它应该停止传播(对于 D 来说,它是 1992.03.23 列,但对于 A 则为 1963.09.21,就在屏幕截图之外)。
有没有一种更快的方法可以实现这一目标,而无需摆弄df.fillna(method='ffill', limit=x)
?我最初的想法是记住最后一个条目的日期,将值传播到行的末尾,然后在保存的日期后用空值填充该行。我一直想知道是否有更聪明的方法可以达到相同的结果。
最佳答案
这可能性能不是很好。我无法获得纯 Pandas 解决方案(这显然不能保证性能!)
>>> df
a b c d e
0 0.0 NaN NaN 1.0 NaN
1 0.0 1.0 NaN 2.0 3.0
2 NaN 1.0 2.0 NaN 4.0
如果我们填充
所有内容会发生什么?
>>> df.ffill(axis=1)
a b c d e
0 0.0 0.0 0.0 1.0 1.0
1 0.0 1.0 1.0 2.0 3.0
2 NaN 1.0 2.0 2.0 4.0
我们需要返回并为每行的最后一个空列添加 NaN:
>>> new_data = []
>>> for _, row in df.iterrows():
... new_row = row.ffill()
... null_columns = [col for col, is_null in zip(row.index, row.isnull().values) if is_null]
... # replace value in last column with NaN
... if null_columns:
... last_null_column = null_columns[-1]
... new_row.ix[last_null_column] = np.nan
... new_data.append(new_row.to_dict())
...
>>> new_df = pd.DataFrame.from_records(new_data)
>>> new_df
a b c d e
0 0.0 0.0 0.0 1.0 NaN
1 0.0 1.0 NaN 2.0 3.0
2 NaN 1.0 2.0 NaN 4.0
关于python - 将非空值向前传播到最后一个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53573260/