我有一個如下所示的資料框
id value
11 0
11 3
11 1
11 2
4 3
4 1
4 8
4 2
5 0
5 3
5 1
5 2
4 2
4 0
4 1
4 3
11 2
11 1
11 0
11 3
我希望平均第 i_th 行的 N (=4) 個子集,它們id是相等的;然后,最終得到以下
id value
11 1
11 2
11 0.5
11 2.5
4 2.5
4 0.5
4 4.5
4 2.5
5 0
5 3
5 1
5 2
例如對于 id=11:
[0 2, 3 1, 1 0, 2 3]/2 = [1, 2, 0.5, 2.5]
uj5u.com熱心網友回復:
您可以創建一個分組器,將每個連續的相同數字組分組,然后為每個組,為每個組獲取一個cumcount。然后,按id那個 cumcount 分組:
consecutive_id_grouper = df['id'].ne(df['id'].shift(1)).cumsum()
cumcount_grouper = df['id'].groupby(consecutive_id_grouper).cumcount()
avg = df.groupby([df['id'], cumcount_grouper], as_index=False, sort=False)['value'].mean()
輸出:
>>> avg
id value
0 11 1.0
1 11 2.0
2 11 0.5
3 11 2.5
4 4 2.5
5 4 0.5
6 4 4.5
7 4 2.5
8 5 0.0
9 5 3.0
10 5 1.0
11 5 2.0
uj5u.com熱心網友回復:
另一種可能的方法是重塑和取平均值。如果有多個級別的復制組,則會中斷。
(df.groupby('id', sort=False)
.apply(lambda x: x['value'].values.reshape(2,-1).T.mean(1) if len(x)==df.id.value_counts().max() else x['value'].values)
.explode()
.reset_index(name='value'))
輸出
id value
0 11 1.0
1 11 2.0
2 11 0.5
3 11 2.5
4 4 2.5
5 4 0.5
6 4 4.5
7 4 2.5
8 5 0
9 5 3
10 5 1
11 5 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/467218.html
