python - Groupby,范围计数和 Pandas 分布
问题描述
我想df
按“ b
”分组并计算不同范围内的项目数。
我试过:
np.random.seed(2)
df = pd.DataFrame({"a": np.random.random_integers(1, high=50, size=10), "b": ['AAA', 'BBB', 'AAA', 'BBB', 'AAA', 'BBB', 'CCC', 'CCC', 'AAA', 'AAA']})
ranges = [0,10,20, 30 ]
df.groupby(pd.cut(df.a, ranges)).agg({'a':'count', 'b':'first'})
返回:
a b
a
(0, 10] 2 BBB
(10, 20] 3 BBB
(20, 30] 1 AAA
但我想 groupbyb
从而使其成为索引,然后“转置”数据帧并使范围成为新列 预期输出:
(0, 10] (10, 20] (20, 30]
AAA 0 0 1
BBB 2 3 0
解决方案
您可以使用pivot table
:
df = df.assign(bins = pd.cut(df.a, bins=ranges)).pivot_table(index='b', columns='bins', values='a', aggfunc='count')
OUTPUT
:
bins (0, 10] (10, 20] (20, 30]
b
AAA 1 0 1
BBB 1 1 0
CCC 0 2 0
推荐阅读
- chart.js - Chart.js 在条形图中显示 x 轴标签,而不是在刻度之间
- sql - 调整 SQL Server 表中的日期以避免覆盖范围重叠
- html - 我可以将特定单词列入白名单以绕过内置的 HTML 文本输入拼写检查吗?
- python - 从 Pandas DataFrame 中的另一个数据框中获取列元素值的快速方法
- python - 迭代器的意外行为
- snowflake-cloud-data-platform - 有人有将数据狗监控与雪花集成的经验吗?
- sql - 比较来自特定列分组的数据并根据条件更新
- c# - .建议不要拉任何结果
- forms - 登录时对用户进行身份验证
- bash - 在 bash 脚本中更改用户