Pandas 将具有唯一键的字典添加到没有唯一键的DataFrame
我试图使用GroupBy对数据帧进行描述性统计,并将这些值放回数据帧中 My DataFrame包含一个非唯一的运行编号,用于标识一个人(匿名),以及一些连接到每个人的值 例如:Pandas 将具有唯一键的字典添加到没有唯一键的DataFrame,pandas,dataframe,statistics,data-science,python-3.7,Pandas,Dataframe,Statistics,Data Science,Python 3.7,我试图使用GroupBy对数据帧进行描述性统计,并将这些值放回数据帧中 My DataFrame包含一个非唯一的运行编号,用于标识一个人(匿名),以及一些连接到每个人的值 例如: RunNr值 1 126 1 158 1 18 2 65 3 31 3 4 通过使用GroupBy,我可以计算每个人的描述性统计数据(跑步人数),比如标准差。我想将这些内容添加回数据框以进行进一步处理(比如用Word制作报告)
RunNr值
1 126
1 158
1 18
2 65
3 31
3 4
通过使用GroupBy,我可以计算每个人的描述性统计数据(跑步人数),比如标准差。我想将这些内容添加回数据框以进行进一步处理(比如用Word制作报告)
结果应该如下所示:
RunNr值标准
1 126 59,9
1 158 59,9
1 18 59,9
265南
3 31 13,5
3 4 13,5
我提出的最佳解决方案是计算标准偏差(和其他统计数据),将它们放入字典,其中运行的数字是关键,值是标准偏差
我现在有一个字典,其中字典中的运行编号是唯一的键,而它不在数据帧中。我的下一步是迭代字典,并使用.loc()将相应的值插入到正确的行中:
对于键,self.dict\u中的值为\u std:
self.internal\u main\u df.loc[self.internal\u main\u df.Fnr==键]=值
我得到这个错误:
TypeError:无法解压缩不可编辑的浮点对象
对于改进我的代码或我的总体方法的建议,我们非常感谢。如果需要每个组使用一个聚合函数填写一列
std
,请参见std
:
df['Std'] = df.groupby('RunNr')['Value'].transform('std')
print (df)
RunNr Value Std
0 1 126 73.357572
1 1 158 73.357572
2 1 18 73.357572
3 2 65 NaN
4 3 31 19.091883
5 3 4 19.091883
如果可能需要更多统计信息,请使用for new columns:
df1 = df.join(df.groupby('RunNr')['Value'].describe(), on='RunNr')
print (df1)
RunNr Value count mean std min 25% 50% 75% \
0 1 126 3.0 100.666667 73.357572 18.0 72.00 126.0 142.00
1 1 158 3.0 100.666667 73.357572 18.0 72.00 126.0 142.00
2 1 18 3.0 100.666667 73.357572 18.0 72.00 126.0 142.00
3 2 65 1.0 65.000000 NaN 65.0 65.00 65.0 65.00
4 3 31 2.0 17.500000 19.091883 4.0 10.75 17.5 24.25
5 3 4 2.0 17.500000 19.091883 4.0 10.75 17.5 24.25
max
0 158.0
1 158.0
2 158.0
3 65.0
4 31.0
5 31.0
或者可以在函数中指定聚合函数:
df2 = df.join(df.groupby('RunNr')['Value'].agg(['mean','max','std']), on='RunNr')
print (df2)
RunNr Value mean max std
0 1 126 100.666667 158 73.357572
1 1 158 100.666667 158 73.357572
2 1 18 100.666667 158 73.357572
3 2 65 65.000000 65 NaN
4 3 31 17.500000 31 19.091883
5 3 4 17.500000 31 19.091883
哇,太快了。我试着运行你的代码,结果得到:AttributeError:'SeriesGroupBy'对象没有属性'Std'@CenturionNOR-不是打字
Std
,而是Std
?我也在试着理解代码。据我所见,当我运行groupby时,我创建了一个新的数据帧对象(与groupby对象等相反),并且可以在常规数据帧上运行相同的方法;在本例中,transform()@CenturionNOR-transform
通过.agg
像聚合数据一样工作,然后创建由聚合值填充的新列。关于聚合的更多信息是,这就像魔术一样工作!感谢您花时间详细说明答案,而不是发布代码,这有助于我理解并成为一名更好的程序员。