如何在Pandas DataFrame中按State和County分组添加rate列的75%分位数新列
解决方法:给原DataFrame添加分组后的75%分位数列
嘿,这问题我熟!你之前用的groupby('State')['rate'].quantile(0.75)只会返回每个State分组的分位数结果,是个单独的Series,没法直接和原DataFrame合并。要实现给原表每一行都加上对应分组的分位数,得用groupby.transform()方法,它能把分组计算的结果“广播”回原DataFrame的每一行,完美匹配你的需求。
具体代码实现
首先先构造你的原DataFrame(如果已经有了可以跳过这步):
import pandas as pd data = { 'State': ['AK', 'AK', 'GA', 'GA', 'GA', 'GA', 'AR', 'AR'], 'county': ['a', 'a', 'a', 'b', 'b', 'c', 'a', 'a'], 'rate': [27.5, 30.5, 35.5, 50.0, 75.5, 90.5, 16.5, 10.5] } df = pd.DataFrame(data)
然后新增目标列,注意要按State和county两个字段分组(你需求里明确是这两个维度):
# 新增列存储每组的75%分位数 df['rate_75th_percentile'] = df.groupby(['State', 'county'])['rate'].transform(lambda x: x.quantile(0.75))
为什么用transform?
groupby.quantile():返回每个分组的单个计算值,结构是分组索引+分位数结果,没法直接对应原表的每一行。groupby.transform():会保留原DataFrame的索引和行数,把每个分组的计算结果填充到该组的所有行中,这样就能直接作为新列添加到原表了。
最终效果
运行后你的DataFrame会变成这样:
| State | county | rate | rate_75th_percentile |
|---|---|---|---|
| AK | a | 27.5 | 29.5 |
| AK | a | 30.5 | 29.5 |
| GA | a | 35.5 | 35.5 |
| GA | b | 50.0 | 69.125 |
| GA | b | 75.5 | 69.125 |
| GA | c | 90.5 | 90.5 |
| AR | a | 16.5 | 14.5 |
| AR | a | 10.5 | 14.5 |
内容的提问来源于stack exchange,提问作者AmberBahia
相关产品推荐
相关产品推荐

