我有一个简单的数据框,希望将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
>>>
如何使它起作用?预先感谢。
答案 0 :(得分:1)
我发现了问题所在。我认为sudo docker run -it -v /home/rr/Desktop/mytest:/src opencv:latest
函数需要应用于每个组:
reset_index
答案 1 :(得分:0)
我认为您的groupby正在生成pandas.series,并且您的功能不适用于该系列。由于某些原因,我尝试使用不同的groupby方法进行操作。找到解决方案后,我会将其发布在这里。