Skip to main content
 首页 » 编程设计

python之Pandas:通过对来自不同 df 的列求和来创建新 df 的 Pythonic 方式

2025年05月04日21over140

假设我们有两个dfs

df1

  a b 
z 3 4 
x 1 3 

和

df2

  a b  
c 4 8 
v 6 1 

我想创建 df3,它有两个新行 [b,n],它的值基于对我的两个 df 中的列 [a,b] 求和,如下所示:

df3

  a  b 
b 4  7 
n 10 9 

我知道这可以简单地通过在两个数据帧上使用 .sum() 并简单地手动创建 df3 来完成,如下所示:

df3 = pd.DataFrame([[4,7],[10,9]], columns = ['a','b']) 

我只是想知道是否有更 pythonic 的方法来使用单个函数或迭代在更短的时间内生成它。

请您参考如下方法:

使用concat与 sum按一级:

df3 = pd.concat([df1, df2], keys=['b', 'n']).sum(level=0) 
print (df3) 
    a  b 
b   4  7 
n  10  9 

多个DataFrames的解决方案:

dfs = [df1, df2, df3, ...] 
df = pd.concat(dfs, keys=range(len(dfs))).sum(level=0) 

编辑:

如果只想对某些列求和:

 cols = set(df1.columns).intersection(df2.columns) 
df3 = pd.concat([df1[['a','b']], df2[['a','b']]], keys=['b', 'n']).sum(level=0) 

对于两个 DataFrame 中的所有列:

cols = list(set(df1.columns).intersection(df2.columns)) 
df3 = pd.concat([df1[cols], df2[cols]], keys=['b', 'n']).sum(level=0) 
print (df3) 
    a  b 
b   4  7 
n  10  9