我有两个数据框,一个大的有很多缺失值,第二个有数据以填充第一个中的缺失数据。
数据框示例:
In[34]: import pandas as pd import numpy as np df2 = pd.DataFrame({'A': [1, 1, 1, 2, 2, 2], 'B': [1, 0, 1, 1, 0, 0]}) df = pd.DataFrame({'A': [0, 1, 2, 3, 4, 5], 'B1': [1, np.nan, np.nan, 8, 9, 1],'B2':[1, np.nan, np.nan, 7, 6, 1], 'B3':[1, np.nan, np.nan, 8, 7, 1] }) df=df.set_index(['A']) df2=df2.set_index(['A']) In[35]: df Out[35]: B1 B2 B3 A 0 1 1 1 1 NaN NaN NaN 2 NaN NaN NaN 3 8 7 8 4 9 6 7 5 1 1 1 In[36]: df2 Out[36]: B A 1 1 1 0 1 1 2 1 2 0 2 0
所以我想做的是使用df2中的数据填充df,同时考虑到df2中的第二个实例时B1不是B2。参见下面的所需输出:
In[38]: df Out[38]: B1 B2 B3 A 0 1 1 1 1 1 0 1 2 1 0 0 3 8 7 8 4 9 6 7 5 1 1 1
B1,B2和B3中1和2的NaN已被df2的数据填充。1 0 1用于索引1,1 0 0用于索引2。请参见下面我对循环实现的低效率:
In[37]: count=1 seen=[] for t in range(0, len(df2)): if df2.index[t] not in seen: count=1 seen.append(df2.index[t]) else: count=count+1 tofill=pd.DataFrame(df2.iloc[t]).transpose() tofill_dict={"B"+str(count):tofill.B} df=df.fillna(value=tofill_dict)
这是可行的,但是当数据集变大时,可能要花费大量时间。所以我的问题是,是否有办法更快地做到这一点?我听说矢量化可以工作,您将如何实现呢?还有其他方法可以更快地做到这一点吗?