假设我们有两个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 的方法来使用单个函数或迭代在更短的时间内生成它。
请您参考如下方法:
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
