从多个df中创建一个df

时间:2020-06-23 14:29:52

标签: python pandas dataframe

我有多个这样的pd df:

df1 = [nan nan nan   1
       nan   2 nan nan
       nan nan nan nan]

df2 = [  1 nan nan nan
       nan nan nan nan
       nan nan nan   4]

df3 = [nan nan nan nan
         5 nan   3 nan
       nan nan nan nan]

现在,我想使用不是nan的列条目创建一个新的df。结果应如下所示:

df1 = [  1 nan nan   1
         5   2   3 nan
       nan nan nan   4]

有人知道怎么做吗?预先感谢!

2 个答案:

答案 0 :(得分:0)

您可以进行合并:

pd.concat([df1,df2,df3]).groupby(level=0).first()

答案 1 :(得分:0)

您可以尝试以下操作:

nan的值替换为0,然后对np.amax执行axis=0

df1 = [['nan', 'nan', 'nan',   1],
       ['nan',   2, 'nan', 'nan'],
       ['nan', 'nan', 'nan', 'nan']]

df1 = pd.DataFrame(df1)
df1 = df1.replace('nan', 0, regex=True)

df2 = [[1, 'nan', 'nan',   'nan'],
       ['nan',   'nan', 'nan', 'nan'],
       ['nan', 'nan', 'nan', 4]]
df2 = pd.DataFrame(df2)
df2 = df2.replace('nan', 0, regex=True)

df3 = [['nan', 'nan', 'nan',   'nan'],
       [5,   'nan', 3, 'nan'],
       ['nan', 'nan', 'nan', 'nan']]
df3 = pd.DataFrame(df3)
df3 = df3.replace('nan', 0, regex=True)

output_arr = np.amax(np.array([df1.values, df2.values, df3.values]),axis=0)
output_df = pd.DataFrame(output_arr)
output_df = output_df.replace(0,'nan', regex=True)
output_df

输出:

enter image description here