python-3.x - 熊猫迭代非常慢
问题描述
iterrows
在迭代 Pandas 数据框时,我需要一些帮助。我有一个像这样的 Pandas 数据框:
| cust_no | channel | month1 | month2 |
| 1 | radio | 0.7 | 0.4 |
| 1 | fb | 0.1 | 0.5 |
| 1 | tv | 0.2 | 0.1 |
| 2 | fb | 0.5 | 0.25 |
| 2 | radio | 0.4 | 0.25 |
| 2 | tv | 0.1 | 0.5 |
我需要按 cust_no 分组时每个月具有最大值的通道,并将它们作为字符串加入同一数据帧的新列中。因此,例如,从上面的数据框:
在客户 1 的情况下,在第 1 个月radio
有最大值,但fb
在第 2 个月有最大值,所以我需要这个字符串:radio>fb
在客户 2 的情况下,在第 1 个fb
月有最大值,但tv
在第 2 个月有最大值,所以我需要这个强大的:fb>tv
感谢任何帮助。谢谢。Performance is really important
解决方案
channel
通过by创建索引DataFrame.set_index
,然后使用DataFrameGroupBy.idxmax
和最后使用 apply+join
:
df1 = (df.set_index('channel')
.groupby('cust_no')['month1','month2']
.idxmax()
.apply('>'.join, axis=1)
.reset_index(name='new'))
print (df1)
cust_no new
0 1 radio>fb
1 2 fb>tv
如果没有其他列是可能的删除过滤列month1
和month2
:
df1 = (df.set_index('channel')
.groupby('cust_no')
.idxmax()
.apply('>'.join, axis=1)
.reset_index(name='new'))
print (df1)
cust_no new
0 1 radio>fb
1 2 fb>tv
推荐阅读
- c# - 如何使用 Win32API NetShareSetInfo 添加共享权限?
- angular - 如何在两个同级组件之间发送消息?
- c# - 在 SharePoint 2013 REST API [本地] 上发布期间出现错误 403
- android - 我做了一个简单的计算器并解决了一些问题
- microsoft-graph-api - 图联系人 api 的联系人列表长度与 office365 人员页面显示的联系人计数不匹配
- android - 如何根据嵌套 json 对象中的某个键值从 firebase 检索数据
- netsuite - SuiteScript 2.0 搜索。创建过滤订单状态
- android - 在 android studio 中同步 gradle 失败
- kubernetes - 在部署更新时重新附加卷声明
- python - 使用 pandas 将字典数据复制到 csv