我有两个 pandas 数据框,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
我只想对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
Run Code Online (Sandbox Code Playgroud)
请注意:
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
Run Code Online (Sandbox Code Playgroud)
因为 sum 默认情况下是基于行的公共索引而不是我希望的n执行的。
如何使用 pandas 内置函数执行此操作?
使用Series.add,但首先n通过以下方式从列创建索引set_index:
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
Run Code Online (Sandbox Code Playgroud)
另一个带有merge和 left join 的解决方案:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2016 次 |
| 最近记录: |