4
我有两个Dataframes大一个缺失值和第二个数据填补缺少的数据在第一个。如何快速填写大量熊猫填充数据?
数据帧的例子:
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
所以我想要做的是填补了DF利用DF2也考虑到B1在DF2跨二审何时到来并不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
的NaN的在B1,B2和B3为1和2已被填充有从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)
这个工作,但是当数据集变得更大可能需要的时间显著量。所以我的问题是如果有办法更快地做到这一点? 我听说矢量化可以工作,你将如何实现这个?有没有其他的方法可以更快地做到这一点?
它是如何工作的?我无法与您的解决方案进行比较,因为错误:'NameError:全局名称'toappend'未定义' – jezrael
感谢您的回答jezrael!我解决了错误的原因,我很抱歉。我已经快速检查过了,它在使用'df2 = df2.groupby(df2.index).apply(lambda x:xBreset_index(drop = True).T)'而不是'df2 = df2.groupby('A' ).apply(lambda x:xBreset_index(drop = True).T)'。当我回家时需要在大数据集上进行测试 – HBX
好的,你是对的,但我认为你只为这个填充重置索引。所以我想删除这个操作。我编辑答案。 – jezrael