Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫按列分组以生成量子点(.25,0.5,75)_Python_Pandas - Fatal编程技术网

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+和它疯狂的宽度