我有两个看起来像的熊猫数据框:
df1:
n column1
0 5.0 0.0
1 6.0 0.0
2 7.0 0.0
3 8.0 0.0
4 9.0 0.0
5 10.0 0.0
df2:
n column2
0 6.0 1.0
1 7.0 1.0
2 8.0 1.0
我只想对 n 相同的行求和column1
和column2
。所需的输出看起来像:
df3:
n column1
0 5.0 0.0
1 6.0 1.0
2 7.0 1.0
3 8.0 1.0
4 9.0 0.0
5 10.0 0.0
请注意:
df2
的列并执行经典求和。到目前为止我尝试过的结果如下:
n column1
0 5.0 1.0
1 6.0 1.0
2 7.0 1.0
3 8.0 NaN
4 9.0 NaN
5 10.0 NaN
因为默认情况下,总和是根据共同的行索引执行的,而不是我希望的 n 。
如何使用pandas内置函数执行此操作?
答案 0 :(得分:3)
使用Series.add
,但首先由set_index
在n
列中创建索引:
df = (df2.set_index('n')['column2']
.add(df1.set_index('n')['column1'], fill_value=0)
.reset_index(name='column1'))
print (df)
n column1
0 5.0 0.0
1 6.0 1.0
2 7.0 1.0
3 8.0 1.0
4 9.0 0.0
5 10.0 0.0
使用merge
并左联接的另一种解决方案:
df = (df1.merge(df2, on='n', how='left'))
df['column1'] = df['column2'].add(df['column1'], fill_value=0)
df = df.drop('column2', axis=1)
print (df)
n column1
0 5.0 0.0
1 6.0 1.0
2 7.0 1.0
3 8.0 1.0
4 9.0 0.0
5 10.0 0.0
答案 1 :(得分:0)
我通过合并数据框并在熊猫上求和来解决它:
---
:cachedir: /opt/puppetlabs/puppet/cache/r10k
:sources:
puppet:
basedir: /etc/puppetlabs/code/environments
remote: https://github.com/Sanket-Shirode/puppet-control.git
df = pd.merge(df1, df2, how='outer', on='n')
df['sum'] = df['column1'] + df['column2']
结果如下:
df[['n', 'sum']].fillna(0)