我有一个这样的数据帧

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

从这个例子中,我想要的输出是这样的

    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

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

但是当我try 使用多个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个组将其装箱,最后将其合并

我还try 使用类似于此的聚合(可能也使用pd.namedagh),但我想知道这是否可行

df.groupby('A').agg(
    b_count = ('B', 'count'),
    b_sum = ('B', 'sum')
    c_count = ('C', 'count'),
    c_sum = ('C', 'sum')
)

有人对此有其他 idea 吗?

推荐答案

因为您需要单独处理每个箱子,所以groupby+size+unstack用于crosstabconcat用于连接数据帧:

bins = [0,2,10]
bins2 = [0,4,10]

temp_df1=pd.crosstab(df['A'], pd.cut(df['B'], bins, labels=False)).add_prefix('B_')
temp_df2=pd.crosstab(df['A'], pd.cut(df['C'], bins2, labels=False)).add_prefix('C_')

df = pd.concat([temp_df1, temp_df2], axis=1).reset_index()
print (df)
   A  B_0  B_1  C_0  C_1
0  1    1    1    2    0
1  2    1    1    1    1
2  3    3    0    1    2

Python相关问答推荐

使用Python从HTTP打印值

如何修复fpdf中的线路出血

使用Python和PRNG(不是梅森龙卷风)有效地生成伪随机浮点数在[0,1)中均匀?

Twilio:CallInstance对象没有来自_的属性'

在Arrow上迭代的快速方法.Julia中包含3000万行和25列的表

如何在Python中使用时区夏令时获取任何给定本地时间的纪元值?

使用LineConnection动画1D数据

需要计算60,000个坐标之间的距离

Python中的嵌套Ruby哈希

在Polars(Python库)中将二进制转换为具有非UTF-8字符的字符串变量

更改键盘按钮进入'

C#使用程序从Python中执行Exec文件

log 1 p numpy的意外行为

NP.round解算数据后NP.unique

在Mac上安装ipython

如何创建一个缓冲区周围的一行与manim?

在Python中动态计算范围

我如何根据前一个连续数字改变一串数字?

在输入行运行时停止代码

在pandas/python中计数嵌套类别