Python 如何用缺少的值填充dataframe列表

Python 如何用缺少的值填充dataframe列表,python,pandas,Python,Pandas,我有一个具有以下内容的数据帧: colA colB ABC 0.12 GHI 0.01 以及一个唯一的列表,我想为其创建一个数据帧,其中包括: ABC DEF GHI 我需要创建的数据帧将具有: colA colB ABC 0.12 DEF 0.00 GHI 0.01 填充新数据帧的最快方法是什么(即,我的直觉是循环)。尝试以下方法: df.set_index("colA").reindex(["ABC", "

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

colA  colB
ABC   0.12
GHI   0.01
以及一个唯一的列表,我想为其创建一个数据帧,其中包括:

ABC
DEF
GHI
我需要创建的数据帧将具有:

colA   colB
ABC    0.12
DEF    0.00
GHI    0.01
填充新数据帧的最快方法是什么(即,我的直觉是循环)。

尝试以下方法:

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
试试这个:

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

如果从列表中创建第二个数据帧并对这两个数据帧使用
。则可以使用
。先组合_
。设置_索引('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
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

如果从列表中创建第二个数据帧并对这两个数据帧使用
。则可以使用
。先组合_
。设置_索引('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
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\u first
reindex
之间,哪种方法更快。至少对于这个数据帧,Sammy的方法更快

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)

如果从列表中创建第二个数据帧并对这两个数据帧使用
。则可以使用
。先组合_
。设置_索引('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
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

如果从列表中创建第二个数据帧并对这两个数据帧使用
。则可以使用
。先组合_
。设置_索引('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
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\u first
reindex
之间,哪种方法更快。至少对于这个数据帧,Sammy的方法更快

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)

另一种方法是对列表进行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

另一种方法是对列表进行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

感谢您关于时间安排的建议。感谢您关于时间安排的建议。在询问有关StackOverflow的问题时,请记住,如果问题已解决,您应通过单击解决方案旁边的复选标记接受最佳答案。谢谢当询问StackOverflow问题时,请记住,如果问题已解决,您应通过单击解决方案旁边的复选标记接受最佳答案。谢谢