如何在不复制列的情况下合并数据?

How do I merge data without duplicating the columns?

假设我有多个数据帧 df1、df2、df3(实际上,我有大约 11 个数据帧)。这些从 excel 个工作表转换为数据框。

示例目的:

     DateTime  | Col1 | Col2 | Col3 |
       ----------------
   jan  | 20 | 30 | 40 |
   Feb  | NaN | NaN| NaN |
   Mar  | NaN | NaN | NaN |
   Apr  | NaN |NaN | NaN |


        | Col1 | Col2 | Col3 |
       ----------------
   jan  | NaN | NaN | NaN |
   Feb  | 20 | 30 | 40 |
   Mar  | NaN | NaN | NaN |
   Apr  | NaN |NaN | NaN |
       | Col1 | Col2 | Col3 |
       ----------------
   jan  | NaN | NaN | NaN |
   Feb  | NaN | NaN | NaN |
   Mar  | 10 | 20 | 80 |
   Apr  | NaN |NaN | NaN |

我希望输出为

Out= DateTime   | Col1 | Col2 | Col3 |
       ----------------
   jan  | 20 | 30 | 40 |
   Feb  | 20 | 30 | 0 |
   Mar  | 10 | 20 | 80 |
   Apr  | NaN |NaN | NaN |

比如说,有多个列但所有电子表格中的名称都相同,有多个行但日期列在所有电子表格中具有相同的行数和名称。我尝试加入、合并和连接,但它们要么覆盖值,要么添加额外的行或列。最后,我希望输出具有相同的行数和列数。

我是 python 的新手,所以想弄明白!

concat 与聚合 sum 结合使用,使用列 date 的解决方案:

df = pd.concat([df1, df2, df3]).groupby('date', sort=False).sum(min_count=1)

如果使用 DatetimeIndex:

df = pd.concat([df1, df2, df3]).groupby(level=0, sort=False).sum(min_count=1)

print (df)
     Col1  Col2  Col3
jan  20.0  30.0  40.0
Feb  20.0  30.0  40.0
Mar  10.0  20.0  80.0
Apr   NaN   NaN   NaN

对于问题中提供的示例,您也可以执行简单的sum。该操作将在 index/columns.

上自动对齐

示例输入(添加了 NaN):

df1 = pd.DataFrame({'Col1': [20, 0, 0], 'Col2': [30, 0, 0], 'Col3': [40, 0, 0]},
                   index=['Jan', 'Feb', 'Mar'])
df2 = pd.DataFrame({'Col1': [0, 20, 0], 'Col2': [0, 30, 0], 'Col3': [0, 40, np.nan]},
                   index=['Jan', 'Feb', 'Mar'])
df3 = pd.DataFrame({'Col1': [0, 0, 10], 'Col2': [0, 0, 20], 'Col3': [0, 0, 80]},
                   index=['Jan', 'Feb', 'Mar'])

代码:

dfs = [df1, df2, df3]
df_out = sum(dfs)

输出:

     Col1  Col2  Col3
Jan    20    30  40.0
Feb    20    30  40.0
Mar    10    20   NaN

注意。如果您有其他列,请定义行为