首页 > 解决方案 > 使用 python 扩展、转置和去聚合数据集

问题描述

我有一个数据集 df,其中有几个类别,每个类别都有数量。我想转换这个集合并为每个类别显示一个不同的计数。我还想添加一个新的“计数”列。新生成的计数超出日期列。示例 q1 中有多少个不同的 alpha 用于 ID A: 2 等等。

数据

ID  date    alpha   beta    gamma   
A   q1      2       2       1   
B   q1      2       2       3   
C   q1              
D   q2      2                   

期望的

ID  type    date    count           
A   alpha   q1      alpha1          
A   alpha   q1      alpha2          
A   beta    q1      beta1           
A   beta    q1      beta2           
A   gamma   q1      gamma1          
B   alpha   q1      alpha1          
B   alpha   q1      alpha2          
B   beta    q1      beta1           
B   beta    q1      beta2           
B   gamma   q1      gamma1          
B   gamma   q1      gamma2          
B   gamma   q1      gamma3          
C
D   alpha   q2      alpha1
D   alpha   q2      alpha2                  

正在做

我相信除了melt函数之外,我可能还必须使用下面的代码。

df.melt(id_vars= ['ID', 'date'],
        var_name = 'type',
        value_name = 'count'

但是,我无法将值扩展为不同的计数

任何建议都会有所帮助。我还在研究这个。

标签: pythonpandasnumpy

解决方案


融化数据框

df=pd.melt(df.replace("",0), id_vars=['ID','date'], value_vars=['alpha', 'beta', 'gamma']).sort_values(by='ID')

按列值的值重复行

newdf = (pd.DataFrame(np.repeat(df.values,df.value.astype(int),axis=0))).rename(columns={0:'ID',1:'date',2:'type',3:'count'})

更新 Count 以在每个 ID 中包含类型和类型计数的 concat

 newdf=newdf.assign(count=newdf['type']+(newdf.groupby(['ID','type'])['type'].cumcount()+1).astype(str))
    

    ID date   type   count
0   A   q1  alpha  alpha1
1   A   q1  alpha  alpha2
2   A   q1   beta   beta1
3   A   q1   beta   beta2
4   A   q1  gamma  gamma1
5   B   q1  alpha  alpha1
6   B   q1  alpha  alpha2
7   B   q1   beta   beta1
8   B   q1   beta   beta2
9   B   q1  gamma  gamma1
10  B   q1  gamma  gamma2
11  B   q1  gamma  gamma3
12  D   q2  alpha  alpha1
13  D   q2  alpha  alpha2

推荐阅读