pandas - 将具有唯一键的字典添加到没有唯一键的 DataFrame
问题描述
我正在尝试使用 GroupBy 对 DataFrame 进行描述性统计,并将这些值放回 DataFrame 中。
我的 DataFrame 包含一个非唯一的流水号,用于标识一个人(匿名),以及一些与每个人相关的值。
例如:
RunNr Value
1 126
1 158
1 18
2 65
3 31
3 4
通过使用 GroupBy,我可以计算每个人的描述性统计数据(运行次数),例如标准偏差。我想将这些添加回 DataFrame 以进行进一步处理(例如在 Word 中制作报告)。
结果应如下所示:
RunNr Value Std
1 126 59,9
1 158 59,9
1 18 59,9
2 65 Nan
3 31 13,5
3 4 13,5
我想出的最佳解决方案是计算标准偏差(和其他统计数据),将它们放入字典中,其中运行数字是键,值是标准偏差。
我现在有一个字典,其中字典中的流水号是唯一键,而它不在 DataFrame 中。我的下一步是遍历字典,并使用 .loc() 将相应的值插入到正确的行中:
for key, value in self.dict_of_std:
self.internal_main_df.loc[self.internal_main_df.Fnr == key] = value
我收到此错误:
TypeError: cannot unpack non-iterable float object
改进我的代码或我的整体方法的建议表示赞赏。
解决方案
std
如果需要每组填充一列,请使用GroupBy.transform
一个聚合函数,这里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
如果需要更多统计信息,可以将DataFrameGroupBy.describe
withDataFrame.join
用于新列:
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
或者可以在函数中指定聚合GroupBy.agg
函数:
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
推荐阅读
- node.js - 在 for 循环中为查询创建 Promise
- json - 在 Swift 4 中合并 Realm 和 Codable 类
- dart - 如何使飞镖页面只出现一次
- visual-studio-code - Visual Studio Code - 灯泡没有出现
- ssis - SSIS Excel Destination Nothing Happens when I hit New for Name of Excel Sheet
- javascript - react-native 中没有出现图标
- java - Richfaces fileuploader nullpointer firefox
- javascript - 打开tel:XXXXXXXXXX时如何通过JS添加CORS
- unity3d - Unity LTS 和 Unity 最新版本有什么区别?
- ruby-on-rails - Rails 5.2 Cache Store with Redis 不允许用户登录开发环境