获取dataframe中bin上的透视表

2024-10-05 12:28:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下所示的数据框

data1 = 

index  A_bin  B_bin  C_bin  D_bin  Decider 
0      4      3      2      1      0
1      2      1      2      1      1
2      5      2      1      2      1
3      1      3      5      1      0
4      1      3      3      2      0
5      5      1      2      1      1
6      3      2      4      1      0

我想创建两个dataframe,为data1中的每个bin和每个列提供'Decider'=0'Decider'=1计数

同样B_binsD_bins每个都没有5个箱子,因此丢失的箱子将计为0

我想要的最终数据帧如下所示

final_data1 = (giving the count of 'Decider'=0)

bins  A_0   B_0   C_0   D_0     
1     2     0     0     3
2     0     1     1     1
3     1     3     1     0
4     1     0     1     0
5     0     0     1     0

最终数据2=(给出“决策者”的计数=1)

bins  A_1   B_1   C_1   D_1     
1     0     2     1     2
2     1     1     2     1
3     0     0     0     0
4     0     0     0     0
5     2     0     0     0

在真实的数据集中,我有300多个列和箱子,范围从1到10,最后一列是Decider。因此,任何用列名表示的代码都有点困难

怎么做


Tags: ofthe数据dataframeindexbincountfinal
1条回答
网友
1楼 · 发布于 2024-10-05 12:28:00

您可以在对Decider进行分组后创建一个字典,并在使用melt取消激发后对其进行迭代,然后使用^{}进行计数,使用^{}进行缺失索引,然后仅访问字典中的每个键以获得最终数据帧:

m = df.melt('Decider',value_name='bins')
d ={f"df_{i}" : pd.crosstab(g['bins'],g['variable']).reindex(sorted(m['bins'].unique())
         ,fill_value=0).add_suffix(f"_{i}").rename_axis(None,axis=1)
                                    for i,g in m.groupby('Decider')}
print(d)

print(d['df_0'],'\n\n',d['df_1'])

      A_bin_0  B_bin_0  C_bin_0  D_bin_0
bins                                    
1           2        0        0        3
2           0        1        1        1
3           1        3        1        0
4           1        0        1        0
5           0        0        1        0 

       A_bin_1  B_bin_1  C_bin_1  D_bin_1
bins                                    
1           0        2        1        2
2           1        1        2        1
3           0        0        0        0
4           0        0        0        0
5           2        0        0        0

相关问题 更多 >

    热门问题