Python 在包含组(groupby)中的数字元素的数据框中创建列
我正在分析一个大型数据集,其中包含每个受试者不同数量的观察结果(从1次到26次……)。由于我需要分析事件之间的时间,只有一次事件的主题是非信息性的 以前,在Stata中工作时,我会使用Stata代码分配一个变量(称为total): 按idnummer排序:gen total=\N 这样,每一行/主题都有一个变量“total”,我可以消除所有主题total=1 我一直在尝试agg函数和大小,但最终我得到了“NaN” 附:用旁边的“类似问题”我找到了我自己问题的答案Python 在包含组(groupby)中的数字元素的数据框中创建列,python,pandas,grouping,stata,Python,Pandas,Grouping,Stata,我正在分析一个大型数据集,其中包含每个受试者不同数量的观察结果(从1次到26次……)。由于我需要分析事件之间的时间,只有一次事件的主题是非信息性的 以前,在Stata中工作时,我会使用Stata代码分配一个变量(称为total): 按idnummer排序:gen total=\N 这样,每一行/主题都有一个变量“total”,我可以消除所有主题total=1 我一直在尝试agg函数和大小,但最终我得到了“NaN” 附:用旁边的“类似问题”我找到了我自己问题的答案 df['total']=df.g
df['total']=df.groupby('idnummer')['sequence'].transform('max')首先,您的问题令人困惑。考虑编辑它让它变得清晰。 第二,IIUC,您希望消除一列中包含值的行,这些值只在该列中出现一次 设置
考虑数据文件<代码> df 中的示例数据
pd.value\u计数
我们可以在此解决方案和其他解决方案中使用列
mycl
中每个元素的频率
vc = df.mycol.value_counts()
vc
N 5
H 4
X 4
W 4
L 3
M 3
A 3
T 3
F 2
Z 2
E 2
S 2
C 2
D 2
Y 2
U 2
Q 1
G 1
K 1
P 1
I 1
Name: mycol, dtype: int64
选项1pd.value\u计数
和map
我们可以看到,['Q','G','K','p','I']
都是单个事件。使用map
将mycl
转换为相对计数和过滤器
df[df.mycol.map(vc) > 1]
选项2np.bincount
和np.unique
实际上,您不需要groupby,只需计算每个字符串的发生次数就简单了一点:
df['total'] = df.idnumber.apply(lambda x: df.idnumber.str.count(x).sum())
或者,您也可以这样映射值计数:
df['total'] = df.idnumber.map(df.idnumber.value_counts())
df['total'] = df.idnumber.apply(lambda x: df.idnumber.str.count(x).sum())
df['total'] = df.idnumber.map(df.idnumber.value_counts())