假设我有多个数据帧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
注意。如果您有其他列,请定义行为