python - 使用 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'
但是,我无法将值扩展为不同的计数
任何建议都会有所帮助。我还在研究这个。
解决方案
融化数据框
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
推荐阅读
- php - 在 laravel 配置文件中使用命名路由
- ios - iOS 我如何创建循环来检查变量 Swift 中的值
- c# - 使用凭据访问本地网络中的共享文件夹
- java - GenericFilterBean vs OncePerRequestFilter 什么时候使用?
- url - Google 列出了后缀为“?from=xiaodiaomao.com”的网站
- javascript - 在循环中如何引用主要的“this”?
- macos - 如何通过 HDMI 在 Macbook Pro 2017 上运行 4K 60 Hz
- string - 使用 Liquid 连接字符串
- openlayers - arcmap 10.6 shapefile 不显示在 OpenLayers 4.6.5 中
- elasticsearch - 查找 lucene 中匹配文档的出现次数