Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 将具有唯一键的字典添加到没有唯一键的DataFrame_Pandas_Dataframe_Statistics_Data Science_Python 3.7 - Fatal编程技术网

Pandas 将具有唯一键的字典添加到没有唯一键的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制作报告)

我试图使用GroupBy对数据帧进行描述性统计,并将这些值放回数据帧中

My DataFrame包含一个非唯一的运行编号,用于标识一个人(匿名),以及一些连接到每个人的值

例如:

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
像聚合数据一样工作,然后创建由聚合值填充的新列。关于聚合的更多信息是,这就像魔术一样工作!感谢您花时间详细说明答案,而不是发布代码,这有助于我理解并成为一名更好的程序员。