python - Pandas 按列分组以生成分位数 (.25, 0.5, .75)
问题描述
假设我们有CityName, Min-Temperature, Max-Temperature, Humidity
不同的城市。
我们需要一个分组的输出数据框CityName
并希望生0.25, 0.5 and 0.75
成分位数。新的列名将是OldColunmName + ('Q1)/('Q2')/('Q3')
.
示例输入
df = pd.DataFrame({'cityName': pd.Categorical(['a','a','a','a','b','b','b','b','a','a','a','a','b','b','b','b']),
'MinTemp': [1.1, 2.1, 3.1, 1.1, 2, 2.1, 2.2, 2.4, 2.5, 1.11, 1.31, 2.1, 1, 2, 2.3, 2.1],
'MaxTemp': [2.1, 4.2, 5.1, 2.13, 4, 3.1, 5.2, 3.4, 3.5, 2.11, 2.31, 3.1, 2, 4.3, 4.3, 3.1],
'Humidity': [0.29, 0.19, .45, 0.1, 0.1, 0.1, 0.2, 0.5, 0.11, 0.31, 0.1, .1, .2, 0.3, 0.3, 0.1]
})
输出
解决方案
第一种方法
首先,您必须将数据分组到您想要的列上,即'cityName'
. 然后,因为你想在每一列上进行多种不同类型的聚合,你可以使用'agg'
function. 对于 中的函数'agg'
,您不能提供参数,因此您将它们定义如下:
def quantile_50(x):
return x.quantile(0.5)
def quantile_25(x):
return x.quantile(0.25)
def quantile_75(x):
return x.quantile(0.75)
quantile_df = df.groupby('cityName').agg([quantile_25, quantile_50, quantile_75])
quantile_df
第二种方法
您可以使用describe
方法并选择您需要的统计数据。通过使用idx
,您可以选择要选择的子索引。
idx = pd.IndexSlice
df.groupby('cityName').describe().loc[:, idx[:, ['25%', '50%', '75%']]]
推荐阅读
- php - WordPress/Timber - 错误:wpdb::prepare() 的查询参数必须有一个占位符
- python - 为除一个元素外的整个图像添加透明度
- javascript - AngularFire:AngularFirestore 忽略用户上下文?
- javascript - DataTables js,如何使用带有“回调”函数的“ajax”选项?
- c - 对于特定问题,我无法理解 c 语言中 for 循环的增量部分
- java - 如何画一条沿着我的手指的线
- python - 我想在几秒钟不活动后自动删除文本
- azure - 401 Unauthorized while access azure function with bearer token | 函数应用受 AAD 保护
- java - java.sql.SQLSyntaxErrorException:ORA-00903:Java 中的无效表名在函数返回时选择计数
- python - 与 ipynb.fs.full 的区别。
导入 * 和来自 ipynb.fs.defs。 进口 *