如何使用缺失值填充数据框列表

时间:2020-10-20 23:17:37

标签: python pandas

我有一个具有以下内容的数据框:

colA  colB
ABC   0.12
GHI   0.01

还有一个我要为其创建数据框的唯一列表:

ABC
DEF
GHI

我需要创建的数据框将具有:

colA   colB
ABC    0.12
DEF    0.00
GHI    0.01

填充新数据框的最快方法是什么(即,我的直觉是循环)。

3 个答案:

答案 0 :(得分:1)

尝试一下:

df.set_index("colA").reindex(["ABC", "DEF", "GHI"], fill_value=0).reset_index()



   colA colB
0   ABC 0.12
1   DEF 0.00
2   GHI 0.01

答案 1 :(得分:1)

如果您从列表中创建第二个数据框,并且对两个数据框都使用.combine_first,则可以使用.set_index('colA')

df1 = pd.DataFrame({'colA': {0: 'ABC', 1: 'GHI'}, 'colB': {0: 0.12, 1: 0.01}})
lst = ['ABC','DEF','GHI']
df2 = pd.DataFrame({'colA' : lst})
df3 = df1.set_index('colA').combine_first(df2.set_index('colA')).reset_index().fillna(0)
df3
Out[1]: 
  colA  colB
0  ABC  0.12
1  DEF  0.00
2  GHI  0.01

如果您从列表中创建第二个数据框,并且对两个数据框都使用.combine_first,则可以使用.set_index('colA')

df1 = pd.DataFrame({'colA': {0: 'ABC', 1: 'GHI'}, 'colB': {0: 0.12, 1: 0.01}})
lst = ['ABC','DEF','GHI']
df2 = pd.DataFrame({'colA' : lst})
df3 = df1.set_index('colA').combine_first(df2.set_index('colA')).reset_index().fillna(0)
df3
Out[1]: 
  colA  colB
0  ABC  0.12
1  DEF  0.00
2  GHI  0.01

我很想知道在combine_firstreindex之间哪种方法更快。萨米的方法至少在此数据帧上更快。

df1 = pd.DataFrame({'colA': {0: 'ABC', 1: 'GHI'}, 'colB': {0: 0.12, 1: 0.01}}).set_index('colA')
lst = ['ABC','DEF','GHI']
df2 = pd.DataFrame({'colA' : lst}).set_index('colA')

def f1(): 
    return df1.combine_first(df2).reset_index().fillna(0)


def f2(): 
    return df1.reindex(lst, fill_value=0).reset_index()

%timeit f1()
%timeit f2()

2.35 ms ± 140 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
784 µs ± 25 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

答案 2 :(得分:0)

另一种方法是pd。对列表进行序列化,追加到现有数据框并删除重复项;

df.append(pd.DataFrame(l,columns=['colA'])).drop_duplicates(subset=['colA'], keep='first').fillna(0)

 colA  colB
0  ABC  0.12
1  DEF  0.01
2  GHI  0.00