У меня есть 2darray
, и для каждой строки я хочу вычислить average
строки в столбце numbers
для того же ключа (в данном случае key1
& key2
. Вот простое представлениемоя проблема, и ниже то, что ожидать, чтобы иметь:
>>> df
Out[3]:
key1 key2 number
0 a c 100
1 b d 200
2 a a 150
3 a a 200
>>> res
100
200
175 # (150+200)/2
175 # (150+200)/2
Я знаю, что есть методы агрегации, такие как grouby
в pandas
согласно предложениям, как в [1] и [2] , но метод groupby
предоставит уникальные агрегаты, в то время как я собираюсь привести их к каждой строке.
Мой текущий рабочий процесс выглядит следующим образом:
- Получите агрегаты с помощью
groupby('foo').mean()
- Затем для каждой строки сопоставьте строки
key
с агрегатами.
Например:
>>> K = df.key1 + df.key2
>>> K
Out[4]:
0 ac
1 bd
2 aa
3 aa
dtype: object
>>> agg = df2.groupby(K).mean()
>>> agg
Out[5]:
number
aa 175
ac 100
bd 200
>>> avgif = []
... agg = agg.squeeze() # groupby results shape in (n, 1)
... for k in K:
... avgif.append(agg.at[K])
>>> avgif
Out[6]:
[100, 200, 175, 175]
Это отлично работает, но моя настоящая проблема в том, что ряд может быть очень большим, может быть, до 200 тыс.
Поэтому я бы хотел, если бы кто-нибудь мог поделиться какими-либо предложениями. Спасибо!