python - 匹配共享相同类型数据的两列的有效方法
问题描述
在这个问题中,“A”和“B”都存储相同类型的数据(页码)。'Hits_A' 是根据 'A' 的命中总和(之前的分组,未显示)。我想根据“B”列对“Hits_A”求和,然后将这些值与“A”列上的页码相关联,如下所示:
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3, 4, 5, 6, 7], 'B': [3, 4, 5, 2, 1, 1, 6],
'Hits_A': [10, 40, 50, 35, 24, 60, 30]})
tmp = df.drop('A', axis=1)
tmp = tmp.groupby('B').sum().reset_index()
tmp = tmp.rename(columns={'B':'A', 'Hits_A':'Hits_B'})
output = pd.merge(df, tmp, how='left', on='A').drop('B', axis=1)
print(df)
产量
A B Hits_A
0 1 3 10
1 2 4 40
2 3 5 50
3 4 2 35
4 5 1 24
5 6 1 60
6 7 6 30
print(output)
产量
A Hits_A Hits_B
0 1 10 84.0
1 2 40 35.0
2 3 50 10.0
3 4 35 40.0
4 5 24 50.0
5 6 60 30.0
6 7 30 NaN
这些是我想以一种不那么笨拙、看起来更干净的方式复制的结果。我不太习惯 lambda 函数之类的东西,想知道这是否可以用更少的行来实现?
解决方案
我们可以groupby
然后sum
将map
分组总和列A
df['Hits_B'] = df['A'].map(df.groupby('B')['Hits_A'].sum())
A B Hits_A Hits_B
0 1 3 10 84.0
1 2 4 40 35.0
2 3 5 50 10.0
3 4 2 35 40.0
4 5 1 24 50.0
5 6 1 60 30.0
6 7 6 30 NaN
推荐阅读
- python - 如何创建基于 txt 文件中存储的到期日期打印上个月的计算
- android - 未调用 RemoteViewsService onGetViewFactory
- arrays - 在 C++ 中对变体的 OLE SafeArray 进行排序
- node.js - 可以将异步函数作为 Websocket(ws) 侦听器传递吗?(node.js 和 ws 库)
- java - javafx线程限制为32?
- c - 如何正确修改以下“switch”语句以获得预期的输出值
- asp.net-web-api - 如何允许使用 IIS Express 和 Web API 的 DELETE 方法?
- performance - 在 i7 上访问“原始”寄存器时是否存在瓶颈?
- spring-boot - @PropertySource 不会自动将 String 属性绑定到枚举?
- python - 无法在 Python 中使用 \r 清除行