python - 如何将间隔添加到分组结果中

标签 python pandas

我需要按地点价格的区间对数据进行分组(步长为5).对于每个组,我想估计中位数 level

df = 
year   place   price   level
1994   AAA     90      1
1993   BBB     89      1
1994   AAA     91      2
1998   AAA     92      3
1990   BBB     80      0
1994   AAA     90      1
1990   BBB     81      0
1991   BBB     92      1

我可以对数据进行分组并计算level的中值,但是我不知道如何添加price的区间:

grouped_df = df.groupby(["year","place"]).agg({'level':'median'}).reset_index()

正确的grouped_df结构应该如下(数字可能不同,只是数据结构的一个例子):

grouped_df = 

year   place   price_min   price_max   level
1990   AAA     80          85          1
...

更新:

最终结果应该是这样的。所以,基本上 price_minprice_max 分别是下限和上限:

   year_ place_  level_median price_min price_max
0   1990    BBB             0  75       80
1   1991    BBB             1  80       85
2   1993    BBB             1  85       90
3   1994    AAA             1  85       90
4   1998    AAA             3  90       95

最佳答案

我想你需要aggregate + cut :

但如果相同的输出需要其他类别 - 添加 5。不理想,但列已转换为 int 并使用 mask添加了 5,然后转换为 categorical

bins = range(0, df['price'].max() + 5, 5)
labels_low = range(0, df['price'].max(), 5)

df2['price_min'] = pd.cut(df2['price_min'], bins=bins, labels=labels_low)
df2['price_max'] = pd.cut(df2['price_max'], bins=bins, labels=labels_low).astype(int)
mask = df2['price_min'] == df2['price_max']
df2['price_max'] = df2['price_max'].mask(mask, df2['price_max'] + 5).astype('category')

print (df2)
   year_ place_  level_median  price_min  price_max
0   1990    BBB             0         75         80
1   1991    BBB             1         90         95
2   1993    BBB             1         85         90
3   1994    AAA             1         85         90
4   1998    AAA             3         90         95

没有分类的解决方案:

df2['price_min'] = pd.cut(df2['price_min'], bins=bins, labels=labels_low).astype(int)
df2['price_max'] = pd.cut(df2['price_max'], bins=bins, labels=labels_low).astype(int)
mask = df2['price_min'] == df2['price_max']
df2['price_max'] = df2['price_max'].mask(mask, df2['price_max'] + 5)
print (df2)
   year_ place_  level_median  price_min  price_max
0   1990    BBB             0         75         80
1   1991    BBB             1         90         95
2   1993    BBB             1         85         90
3   1994    AAA             1         85         90
4   1998    AAA             3         90         95

关于python - 如何将间隔添加到分组结果中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43835661/

相关文章:

python - 使用 OpenPyXL 导入多个 Excel 文件

python - Pymysql插入外键错误

python - Pandas groupby() 比较并计算两列

python - pandas DataFrame 中的假日日历

python:在单元测试中测试特定功能?

python - 将符号矩阵传递给 sympy.lambdify

Python:默认比较

python - 使用 Xarray 从 netCDF 文件中提取数据到高数据帧中的有效方法

python - 有没有基于索引和列的 Pandas 方法?

python - 如何计算 Pandas 中每月分成几天的两个日期之间的天数