将非空值向前传播到最后一个条目

2024-04-29 10:48:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大数据帧,看起来像这样: enter image description here

正如你所知,有很多空白。我想向前传播非空值(例如,在第一行1029转到1963.02.12列,介于10291043之间),但只传播到最后一个条目,也就是说,当它遇到最后一个非空值时应该停止传播(对于D,应该是 1992年3月23日的专栏,但对于一个年轻人来说应该是1963年9月21日,就在屏幕截图之外)。你知道吗

有没有更快捷的方法来实现这一点而不必费心于df.fillna(method='ffill', limit=x)?我最初的想法是记住最后一个条目的日期,将值传播到行的末尾,然后在保存的日期之后用空值填充行。我一直在想是否有更聪明的方法来达到同样的效果。你知道吗


Tags: 数据方法目的df屏幕费心条目method
1条回答
网友
1楼 · 发布于 2024-04-29 10:48:55

这可能不是很有效。我无法得到一个纯熊猫解决方案(这显然不能保证性能!)你知道吗

>>> 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

如果我们只是ffill一切会怎样?你知道吗

>>> 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

相关问题 更多 >