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



假设我有多个数据帧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。操作将在索引/列上自动对齐。

示例输入(添加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

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

相关内容

  • 没有找到相关文章

最新更新