Python 在包含组(groupby)中的数字元素的数据框中创建列

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

我正在分析一个大型数据集,其中包含每个受试者不同数量的观察结果(从1次到26次……)。由于我需要分析事件之间的时间,只有一次事件的主题是非信息性的

以前,在Stata中工作时,我会使用Stata代码分配一个变量(称为total):

按idnummer排序:gen total=\N

这样,每一行/主题都有一个变量“total”,我可以消除所有主题total=1

我一直在尝试agg函数和大小,但最终我得到了“NaN”

附:用旁边的“类似问题”我找到了我自己问题的答案


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
选项1
pd.value\u计数
map

我们可以看到,
['Q','G','K','p','I']
都是单个事件。使用
map
mycl
转换为相对计数和过滤器

df[df.mycol.map(vc) > 1]
选项2
np.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())