我有一个这样的数据帧
df = pd.DataFrame({
'A': [1,1,2,2,3,3,3],
'B': [1,3,1,3,1,2,1],
'C': [1,3,5,3,7,7,1]})
A B C
0 1 1 1
1 1 3 3
2 2 1 5
3 2 3 3
4 3 1 7
5 3 2 7
6 3 1 1
我想用列a的groupby创建列B(count)的binning
例如B_bin1,其中B<3,B_bin2为其余(>=3),C_bin1为C<5和C_bin2表示其余
从这个例子中,我想要的输出是这样的
A B_bin1 B_bin2 C_bin1 C_bin2
0 1 1 1 2 0
1 2 1 1 1 1
2 3 3 0 1 2
我发现了类似的问题
Pandas groupby with bin counts
,它正在为1个箱子工作
bins = [0,2,10]
temp_df=df.groupby(['A', pd.cut(df['B'], bins)])
temp_df.size().unstack()
B (0, 2] (2, 10]
A
1 1 1
2 1 1
3 3 0
但是当我尝试使用多个bin时,它不起作用(我的真实数据有很多binning组)
bins = [0,2,10]
bins2 = [0,4,10]
temp_df=df.groupby(['A', pd.cut(df['B'], bins), pd.cut(df['C'], bins2)])
temp_df.size().unstack()
C (0, 4] (4, 10]
A B
1 (0, 2] 1 0
(2, 10] 1 0
2 (0, 2] 0 1
(2, 10] 1 0
3 (0, 2] 1 2
(2, 10] 0 0
我的解决方法是创建一个小的临时df,然后使用1个组1个组1个组1个组1个组将其装箱,最后将其合并
我还尝试使用类似于此的聚合(可能也使用pd.namedagh),但我想知道这是否可行
df.groupby('A').agg(
b_count = ('B', 'count'),
b_sum = ('B', 'sum')
c_count = ('C', 'count'),
c_sum = ('C', 'sum')
)
有人对此有其他想法吗?