У меня есть простой фрейм данных, к которому я хочу применить функцию groupby
к столбцу «A» и создать новый столбец, рассчитанный по определенной функции (цикл внутри функции), который получает значения из столбца «B» и столбца «C» , Моя проблема в том, что я смог использовать функцию для всего фрейма данных, но не для сгруппированного фрейма данных (Exception: Column(s) B already selected
). Я не знаю, почему он выдает ошибку в сгруппированном фрейме данных, но не во всем фрейме данных. Моя реализация, как показано ниже:
>>> import pandas as pd
>>>
>>> df = pd.read_csv("foo.txt", sep="\t")
>>> df
A B C
0 1 4 3
1 1 5 4
2 1 2 10
3 2 7 2
4 2 4 4
5 2 6 6
>>>
>>> def calc(data):
... length = len(data['B'])
... mx = data['B'][0]
... nx = data['C'][0]
... for i in range(1,length):
... my = data['B'][i]
... ny = data['C'][i]
... nx = nx + ny
... mx=(mx*nx+my*ny)/(nx+ny)
... return(mx)
...
>>> df_grouped = df.groupby(['A'])
>>> calc(df)
4.217694879423274
>>> calc(df_grouped)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in calc
File "/mnt/projects/kokep/kokep/devel/miniconda3/lib/python3.6/site-packages/pandas/core/base.py", line 250, in __getitem__
.format(selection=self._selection))
Exception: Column(s) B already selected
>>>
Как мне заставить это работать? Заранее спасибо.