python - 避免应用到 pandas groupby 做多功能操作
问题描述
我正在尝试将多个函数应用于熊猫中的不同列。我的数据框由超过 10M 行和超过 100K 组组成。我正在尝试与此类似的操作(下面的示例),但这需要很长时间。我尝试使用dask,但这也无济于事。
有关如何改进以下示例的任何建议?
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(4,4), columns=list('abcd'))
df['group'] = [0, 0, 1, 1]
def f(x):
d = {}
d['a_sum'] = x['a'].sum()
d['a_max'] = x['a'].max()
d['b_mean'] = x['b'].mean()
d['c_d_prodsum'] = (x['c'] * x['d']).sum()
return pd.Series(d, index=['a_sum', 'a_max', 'b_mean', 'c_d_prodsum'])
df.groupby('group').apply(f)
解决方案
将它们与 聚合有帮助.agg
吗?
import pandas as pd
df = pd.DataFrame(np.random.rand(4,4), columns=list('abcd'))
df['group'] = [0, 0, 1, 1]
df['c_d_prod'] = df['c'] * df['d']
df = df.groupby('group').agg({'a' : ['sum', 'max'], 'b' : ['mean'], 'c_d_prod': ['sum'] })
print(df)
输出:
a b c_d_prod
sum max mean sum
group
0 1.693675 0.966228 0.500866 0.155463
1 0.950398 0.786002 0.355562 0.557794
如果您愿意,可以重命名列:
df.columns = ['a_sum', 'a_max', 'b_mean', 'c_d_prodsum']
print(df)
输出:
a_sum a_max b_mean c_d_prodsum
group
0 0.899459 0.736511 0.233027 1.287123
1 0.913862 0.654808 0.730330 0.177089
推荐阅读
- html - 如何在表格标题内垂直居中对齐图标
- vb.net - 如何在选择 vb.net 中的复选框时使用 datagridview 发送多条消息?
- postgresql - Postgres递归json查询
- amazon-web-services - 如何让订阅解决联合类型?
- architecture - REST API 可以处理事务关键应用程序吗?
- google-cloud-platform - 参数 --max-dispatches-per-second:无效的浮点值:'6/m'
- ruby-on-rails - Rails RSpec 撬“重新加载!”
- android - 如何将页脚添加到 android 菜单抽屉(导航视图)
- rest - 带有 RESTful API 正文的 HTTP GET 请求
- python - 从脚本导入包引发“AttributeError:模块没有属性”