自定义函数适用于整个数据帧,但不适用于Python中的分组数据帧(与“ groupby”函数一起应用)

时间:2019-07-05 03:19:51

标签: python function pandas-groupby

我有一个简单的数据框,希望将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
>>>

如何使它起作用?预先感谢。

2 个答案:

答案 0 :(得分:1)

我发现了问题所在。我认为sudo docker run -it -v /home/rr/Desktop/mytest:/src opencv:latest 函数需要应用于每个组:

reset_index

答案 1 :(得分:0)

我认为您的groupby正在生成pandas.series,并且您的功能不适用于该系列。由于某些原因,我尝试使用不同的groupby方法进行操作。找到解决方案后,我会将其发布在这里。