gpt4 book ai didi

python - Pandas 数据帧 : get average of first rows of each subgroup within a group

转载 作者:行者123 更新时间:2023-12-02 02:51:19 26 4
gpt4 key购买 nike

我有一个如下所示的 pandas 数据框:

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 dataframe get first row of each group在这种情况下,我不想按一个“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 万行。

最佳答案

找到每组 Person_IDItem_IDfirst 行后,您需要对 Person_ID 再次分组code> 求平均值。像这样:

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

关于python - Pandas 数据帧 : get average of first rows of each subgroup within a group,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61924262/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com