我有如下数据框
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_table
与 pd.cut
如果您不太关心列的顺序,因为 count 和 sum 不会在 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/