python - 如何在 pandas 中以复杂的条件进行分箱

标签 python pandas dataframe

我有如下数据框

age  type days 
1    a    1
2    b    3
2    b    4
3    a    5   
4    b    2
6    c    1
7    f    0
7    d    4
10   e    2
14   a    1

首先我想对年龄进行分类

年龄

[0~4]

age  type days  
1    a    1
2    b    3
2    b    4
3    a    5   
4    b    2

然后用type分组汇总统计天数

   sum count
a   6   2
b   9   3
c   0   0
d   0   0
e   0   0
f   0   0

然后我想把这个方法应用到另一个binns。

[5~9] [11~14]

下面是我想要的结果

   [0~4]         [5~9]      [10~14]
   sum count  sum count  sum count
a   6   2      0   0      1   1
b   9   3      0   0      0   0
c   0   0      1   1      0   0
d   0   0      4   1      0   0
e   0   0      0   0      2   1
f   0   0      0   1      0   0

如何做到这一点? 这对我来说非常复杂..

最佳答案

考虑一个 pivot_tablepd.cut如果您不太关心列的顺序,因为 countsum 不会在 bin 下配对在一起。通过操作,您可以更改此类顺序。

df['bin'] = pd.cut(df.age, [0,4,9,14])

pvtdf = df.pivot_table(index='type', columns=['bin'], values='days', 
                       aggfunc=('count', 'sum')).fillna(0)

#       count                   sum               
# bin  (0, 4] (4, 9] (9, 14] (0, 4] (4, 9] (9, 14]
# type                                            
# a       2.0    0.0     1.0    6.0    0.0     1.0
# b       3.0    0.0     0.0    9.0    0.0     0.0
# c       0.0    1.0     0.0    0.0    1.0     0.0
# d       0.0    1.0     0.0    0.0    4.0     0.0
# e       0.0    0.0     1.0    0.0    0.0     2.0
# f       0.0    1.0     0.0    0.0    0.0     0.0

关于python - 如何在 pandas 中以复杂的条件进行分箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41993561/

相关文章:

python - gevent.StreamServer 和非阻塞 raw_input()?

python - 等价类优化解

python - 在sqlalchemy中,如何快速定义相同的表模型(calss),而仅表名不同?

Python-值错误: could not broadcast input array from shape (5) into shape (2)

python - 如何在 pandas 中将 n*m DataFrame 与 1*m DataFrame 相乘?

python - 调整大小后如何在 python-pillow 中获取图像大小?

python - 根据 pandas 中的列和条件对值进行分组

python - Pandas 按组使用第一个有效索引删除 nan

python - 将函数应用于 Pandas 数据框中的特定单元格

python - Pandas:将两个不同大小的数据框合并在一列上