熊猫:DataFrame列表的按单元填充(方法='pad')

时间:2018-10-27 13:25:29

标签: python pandas numpy

基本上,我正在尝试做类似this的事情,但是要用fillna而不是总和。

我有一个df的列表,每个列表具有相同的列号/索引,并随时间推移而排列:

import numpy as np
import pandas as pd
np.random.seed(0)

df_list = []
for index in range(3):
    a  = pd.DataFrame(np.random.randint(3, size=(5,3)), columns=list('abc'))
    mask = np.random.choice([True, False], size=a.shape)
    df_list.append(a.mask(mask))

现在,我想替换第i个的numpy.nan单元 DataFrame中的df_listi-1 th中相同单元格的值 DataFrame中的df_list

因此,如果第一个DataFrame是:

     a    b    c
 0  NaN  1.0  0.0
 1  1.0  1.0  NaN
 2  0.0  NaN  0.0
 3  NaN  0.0  2.0
 4  NaN  2.0  2.0

第二个是:

     a    b    c
 0  0.0  NaN  NaN
 1  NaN  NaN  NaN
 2  0.0  1.0  NaN
 3  NaN  NaN  2.0
 4  0.0  NaN  2.0

然后,输出output_list应该是与df_list相同长度的列表,并且还应具有DataFrames作为元素。

output_list的第一项与df_list的第一项相同。 output_list的第二个条目是:

     a    b    c
 0  0.0  1.0  0.0
 1  1.0  1.0  NaN
 2  0.0  1.0  0.0
 3  NaN  0.0  2.0
 4  0.0  2.0  2.0

1 个答案:

答案 0 :(得分:1)

我相信update功能对此非常有用,请参阅文档:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.update.html
这是一种专门允许您更新DataFrame的方法,在这种情况下,只能更新其NaN元素。

特别是,您可以像这样使用它:

new_df_list = df_list[:1]
for df_new, df_old  in zip(df_list[1:], df_list[:-1]):
    df_new.update(df_old, overwrite=False)
    new_df_list.append(df_new)

这将为您提供所需的输出