基本上,我正在尝试做类似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_list
由i-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
答案 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)
这将为您提供所需的输出