[英]Count multiple tested items grouped by user variables from Python DataFrame
我已将用户测试数据文件整理到 DataFrame 中,其中第 0 - 2 列是他们的特征,从第 3 列开始的列有他们测试过的产品品牌类型/型号的项目代码。 我想统计按级别、年龄组和性别分组的唯一项目代码,以创建摘要并跟踪某些模型的测试次数。 output 需要列出项目代码名称以及针对该特定用户特征测试了多少次,即针对精英,20-40,F:T3 已经测试了 12 次。
我曾尝试使用 groupby() 方法,但也无法获取列出的实际项目代码名称及其出现次数。
output 可以是表格形式,DataFrame,或者建议另一种有效的方法来解决这个问题。
Dataframe 格式:
age-
index level group gender 0 1 2 ...... 80
1 elite 20-40 F T3 T4 RR23 T34
2 intermediate <11 M T56 T44 RR2 T81
3 elite 11-20 M T45 RR23 T3 RR2
4 beginner >40 F RR2 T56 T3 T45
5 advanced 20-40 F RR22 T4 T45 RR22
6 beginner 11-20 M T81 T4 T56 T4
首先,请参阅这篇关于如何制作好的 pandas 示例的帖子。
df
level group gender 0 1 2 3
0 elite 20-40 F T3 T4 RR23 T34
1 intermediate <11 M T56 T44 RR2 T81
2 elite 11-20 M T45 RR23 T3 RR2
3 beginner >40 F RR2 T56 T3 T45
4 advanced 20-40 F RR22 T4 T45 RR22
5 beginner 11-20 M T81 T4 T56 T4
6 intermediate <11 M T56 T44 RR2 T34
7 elite 11-20 M T45 RR23 T3 RR23
假设每一行对应一个人,并且 80 列(用数字标记)是对该人进行的 80 次试验/实验的某种结果,则可以重新组织数据,以便可以轻松地对其进行汇总和计数。
import numpy as np
import pandas as pd
from collections import Counter
values = pd.unique(df.loc[:, df.columns[3:]].values.ravel('K'))
cols = df.columns[:3].to_list() + list(values)
df2 = pd.DataFrame(data=[], columns=cols)
counts = df.loc[:, df.columns[3:]].apply(Counter, axis=1)
for i, c in enumerate(counts):
tmp = pd.DataFrame(dict(c), index=[i])
df2 = df2.append(tmp, ignore_index=True)
df2.loc[:, df2.columns[:3]] = df.loc[:, df.columns[:3]]
df2 = df2.fillna(0)
这使得列名称为实际结果 label,并且该值对应于该结果 label 的“计数”。
level group gender T3 T56 T45 RR2 RR22 T81 T4 T44 RR23 T34
0 elite 20-40 F 1 0 0 0 0 0 1 0 1 1
1 intermediate <11 M 0 1 0 1 0 1 0 1 0 0
2 elite 11-20 M 1 0 1 1 0 0 0 0 1 0
3 beginner >40 F 1 1 1 1 0 0 0 0 0 0
4 advanced 20-40 F 0 0 1 0 2 0 1 0 0 0
5 beginner 11-20 M 0 1 0 0 0 1 2 0 0 0
6 intermediate <11 M 0 1 0 1 0 0 0 1 0 1
7 elite 11-20 M 1 0 1 0 0 0 0 0 2 0
现在,如果您想计算一些组统计数据,例如在级别、组和性别分组中存在多少“T3”结果,您可以按级别、组和性别进行分组。
df2.groupby(['level', 'group', 'gender'])['T3'].sum()
level group gender
advanced 20-40 F 0
beginner 11-20 M 0
>40 F 1
elite 11-20 M 2
20-40 F 1
intermediate <11 M 0
Name: T3, dtype: int64
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.