Python 熊猫按列分组以生成量子点(.25,0.5,75)
假设我们有不同城市的城市名称、最低温度、最高温度、湿度。 我们需要一个分组在Python 熊猫按列分组以生成量子点(.25,0.5,75),python,pandas,Python,Pandas,假设我们有不同城市的城市名称、最低温度、最高温度、湿度。 我们需要一个分组在CityName上的输出数据帧,并希望生成0.25、0.5和0.75分位数。新的colunm名称将是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']),
CityName
上的输出数据帧,并希望生成0.25、0.5和0.75分位数。新的colunm名称将是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]
})
输出
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'
函数。对于'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
第二种方法
您可以使用description
方法并选择所需的统计信息。通过使用idx
可以选择要选择的子索引
idx = pd.IndexSlice
df.groupby('cityName').describe().loc[:, idx[:, ['25%', '50%', '75%']]]
有两个字段。在这个例子中,只有“城市”要分组,有3个字段需要分位数。你能举例说明你的答案吗code@VZG我很乐意给你代码,但我需要你的数据框。请按照代码中的方式添加数据框(可复制的数据框),以便更好地使用数据框更新问题,请执行以下操作needful@VZG刚刚更新了我的答案,谢谢。有没有办法对colunm名称进行软编码。我有大约100+和它疯狂的宽度