【发布时间】:2015-10-31 15:48:54
【问题描述】:
我正在使用熊猫模块。在我的 DataFrame 3 中,字段是帐户、月份和薪水。
account month Salary
1 201501 10000
2 201506 20000
2 201506 20000
3 201508 30000
3 201508 30000
3 201506 10000
3 201506 10000
3 201506 10000
3 201506 10000
我正在对 Account 和 Month 进行 groupby,并将薪水转换为所属组薪水的百分比。
MyDataFrame['salary'] = MyDataFrame.groupby(['account'], ['month'])['salary'].transform(lambda x: x/x.sum())
现在 MyDataFrame 变成如下表
account month Salary
1 201501 1
2 201506 .5
2 201506 .5
3 201508 .5
3 201508 .5
3 201506 .25
3 201506 .25
3 201506 .25
3 201506 .25
问题是:5000 万行这样的操作需要 3 个小时。 我单独执行了 groupyby,它很快只需要 5 秒。我认为这里的转换需要很长时间。 有什么方法可以提高性能?
更新: 为了提供更清晰的添加示例 一些账户持有人在 6 月收到了 2000 的工资,在 7 月收到了 8000 的工资,因此他的比例变为 6 月的 0.2 和 7 月的 0.8。我的目的是计算这个比例。
【问题讨论】:
-
回答 = 请求。所以意思是,创建数据集回答每个条目以获得最佳性能。否则浪费资源。不要迭代你的集合。为什么 google bot 会访问所有网站?
-
@SDilmac 忘记在 groupby 之后添加列名,现在更新。根据您的评论,不确定这是否浪费资源。当你说不要迭代你的集合时,另一种方式是什么?这就是我需要的。当一切都在内存中时,为什么我需要一个一个地迭代。但我不知道其他方式是什么
-
当你说不要迭代你的收藏=收藏的条目百分比(1/50m)所以当检查总状态时你会扫描所有收藏。朋友,您将准备好接受所有请求。创建集合状态的集合。同时写入源和状态(重组、分析)集合。
-
@SDilmac 什么都不懂,你能举个例子/链接你想建议什么
-
@Vipin:你为什么要做
lambda x: x.sum()而不是简单的sum或'sum'? Python 函数和字符串都被截获并传递给函数的快速版本。
标签: python pandas group-by transform