我有一个如下所示的熊猫数据框:
df = pd.DataFrame({'Person_ID': [1,1,1,1,1,1,2,2,2,3,3,3,3],
'Item_ID': [1,1,2,4,4,4,2,3,3,1,2,2,2],
'Value': [1,4,6,5,8,7,3,2,9,8,4,1,2]})
我想通过person_id和item_id对其进行分组,然后获取每个第一行的平均值。例如:Person_ID 1与“ Item_ID的1,2和4”相关联。此Person_ID和这些组的第一项的值分别为1,6和5。平均为4。
Person_ID Item_ID Value
0 1 1 1
1 1 1 4
2 1 2 6
3 1 4 5
4 1 4 8
5 1 4 7
6 2 2 3
7 2 3 2
8 2 3 9
9 3 1 8
10 3 2 4
11 3 2 1
12 3 2 2
期望的结果:
Person_ID Average_value_first_entries
1 4
2 2.5
3 6
我注意到这个问题是类似的,但是这个问题的版本更复杂:Pandas数据框获取每个组的第一行。在这种情况下,我不想按一个“ id”进行分组,而是希望按两个“ id”进行分组并取平均值。
我尝试了以下方法:
df.groupby(['Person_ID', 'Item_ID']).first()['Value']
但是,这将返回每个“第一个”条目,而不是平均值。
Person_ID Item_ID
1 1 1
2 6
4 5
2 2 3
3 2
3 1 8
2 4
Name: Value, dtype: int64
任何帮助,将不胜感激。我特别感谢“高效计算”(时间)解决方案,因为实际数据集包含120万行。
在和的first
每组中找出行之后,您需要重新分组以找到均值。像这样:Person_ID
Item_ID
Person_ID
In [1312]: d = df.groupby(['Person_ID','Item_ID'], as_index=False).head(1)
In [1315]: d.groupby('Person_ID', as_index=False)['Value'].mean()
Out[1315]:
Person_ID Value
0 1 4.0
1 2 2.5
2 3 6.0
或按照@Datanovice的建议单行显示:
In [1320]: df.groupby(['Person_ID','Item_ID']).first().groupby(level=0)['Value'].mean().to_frame().reset_index()
Out[1320]:
Person_ID Value
0 1 4.0
1 2 2.5
2 3 6.0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句