python - Python Pandas:有效地聚合不同列上的不同函数并将结果列组合在一起
问题描述
到目前为止,我对标题中描述的任务的方法非常简单,但它似乎有点低效/unpythonic。我通常做的一个例子如下:
原始的 Pandas DataFramedf
有 6 列:'open', 'high', 'low', 'close', 'volume', 'new dt'
import pandas as pd
df_gb = df.groupby('new dt')
arr_high = df_gb['high'].max()
arr_low = df_gb['low'].min()
arr_open = df_gb['open'].first()
arr_close = df_gb['close'].last()
arr_volumne = df_gb['volume'].sum()
df2 = pd.concat([arr_open,
arr_high,
arr_low,
arr_close,
arr_volumne], axis = 'columns')
乍一看似乎已经很高效,但是当我有 20 个函数等待应用到 20 个不同的列时,它很快就变得不合 Python/低效。
有没有办法让它更高效/pythonic?先感谢您
解决方案
In [3]: import pandas as pd
In [4]: import numpy as np
In [5]: df = pd.DataFrame([[1, 2, 3],[4, 5, 6],[7, 8, 9],
...: [np.nan, np.nan, np.nan]],columns=['A', 'B', 'C'])
In [6]: df.agg({'A' : ['sum', 'min'], 'B' : ['min', 'max']})
Out[6]:
A B
max NaN 8.0
min 1.0 2.0
sum 12.0 NaN
对于作为列的函数:
In [11]: df.agg({'A' : ['sum'], 'B' : ['min', 'max']}).T
Out[11]:
max min sum
A NaN NaN 12.0
B 8.0 2.0 NaN
要使用自定义函数,您可以这样做:
In [12]: df.agg({'A' : ['sum',lambda x:x.mean()], 'B' : ['min', 'max']}).T
Out[12]:
<lambda> max min sum
A 4.0 NaN NaN 12.0
B NaN 8.0 2.0 NaN
推荐阅读
- mongodb - 父子层次结构mongodb聚合管道
- python - 完全停止运行 pyqt5 应用程序
- javascript - js序列化正确格式
- oracle - OSB 12c 的 Jdeveloper 中似乎没有导入的自定义 xpath 函数
- iis - 从 HTTP-Request/Response 对象中检索 IIS 日志参数值
- javascript - Meteor/SSR/Apollo 客户端 - 尝试使用 Apollo 设置 SSR 并没有找到 fetch
- php - 无法在 codeigniter 中按类别过滤数据
- reactjs - 如何在 ReactJS 中使表格可排序?
- amazon-web-services - AWS S3:React 失效请求的定价。托管在 S3 上的 Node.js 应用程序
- matplotlib - 在一个图中绘制 4 个子图时,set_xlabel 在 ax[0, 0] 中无效