Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy操作对groupby无效。改为使用.groupby(…).mean(),我就是这么做的_Python_Pandas_Dataframe_Group By_Mean - Fatal编程技术网

Python Numpy操作对groupby无效。改为使用.groupby(…).mean(),我就是这么做的

Python Numpy操作对groupby无效。改为使用.groupby(…).mean(),我就是这么做的,python,pandas,dataframe,group-by,mean,Python,Pandas,Dataframe,Group By,Mean,我想得到以下数据框people\u preferences前两列中每一列的平均值,根据他们的段Segment Fun|Not-Fun Pro-garden|Pro-home Segment 0 NaN NaN cats 1 NaN NaN cats 2

我想得到以下数据框
people\u preferences
前两列中每一列的平均值,根据他们的段
Segment

      Fun|Not-Fun              Pro-garden|Pro-home      Segment
0                          NaN                NaN       cats
1                          NaN                NaN       cats
2                         -1.0                NaN       cats

...                        ...                ...        ...
4570                      -1.0               -1.0       dogs
4571                      -1.0                1.0       dogs
4572                      -1.0                1.0       dogs
所以我尝试了
people\u preferences.groupby('Segment',as\u index=False)。mean(skipna=True)
,但它返回:
UnsupportedFunctionCall:numpy操作对groupby无效。改为使用.groupby(…).mean()

以下是完整的错误消息:

---------------------------------------------------------------------------
UnsupportedFunctionCall                   Traceback (most recent call last)
<ipython-input-489-f8da6e73c33c> in <module>
     48 pairs = list(itertools.combinations(df_features.columns, 2))
     49 
---> 50 [plot_mean(pair[0],pair[1]) for pair in pairs]
     51 
     52 fig = px.scatter(df_features, x=columns_x, y=columns_y)

<ipython-input-489-f8da6e73c33c> in <listcomp>(.0)
     48 pairs = list(itertools.combinations(df_features.columns, 2))
     49 
---> 50 [plot_mean(pair[0],pair[1]) for pair in pairs]
     51 
     52 fig = px.scatter(df_features, x=columns_x, y=columns_y)

<ipython-input-489-f8da6e73c33c> in plot_mean(column_x, column_y)
     23         people_preferences = df_features[[column_x,column_y,'Segment']]
     24         print(people_preferences)
---> 25         print(people_preferences.groupby('Segment', as_index=False).mean( skipna = True))
     26         # parties.append('PEOPLE')
     27         dataframe = pd.DataFrame(dict(x=parties_x, y=parties_y, parties = parties))

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\groupby\groupby.py in mean(self, *args, **kwargs)
   1200         Name: B, dtype: float64
   1201         """
-> 1202         nv.validate_groupby_func("mean", args, kwargs, ["numeric_only"])
   1203         try:
   1204             return self._cython_agg_general(

C:\ProgramData\Anaconda3\lib\site-packages\pandas\compat\numpy\function.py in validate_groupby_func(name, args, kwargs, allowed)
    375                 "numpy operations are not valid "
    376                 "with groupby. Use .groupby(...)."
--> 377                 "{func}() instead".format(func=name)
    378             )
    379         )
---------------------------------------------------------------------------
UnsupportedFunctionCall回溯(最近一次调用最后一次)
在里面
48对=列表(itertools.组合(df_features.columns,2))
49
--->50[成对图的平均值(成对[0],成对[1])]
51
52 fig=px.散射(df_特征,x=columns_x,y=columns_y)
英寸(.0)
48对=列表(itertools.组合(df_features.columns,2))
49
--->50[成对图的平均值(成对[0],成对[1])]
51
52 fig=px.散射(df_特征,x=columns_x,y=columns_y)
图中的平均值(x列,y列)
23个人偏好=df特征[[列x,列y,'Segment']]
24种打印方式(个人偏好)
--->25打印(people_preferences.groupby('Segment',as_index=False)。平均值(skipna=True))
26#parties.append('人')
27数据帧=pd.数据帧(dict(x=参与方,y=参与方,参与方=参与方))
C:\ProgramData\Anaconda3\lib\site packages\pandas\core\groupby\groupby.py的平均值(self、*args、**kwargs)
1200名称:B,数据类型:float64
1201         """
->1202 nv.validate_groupby_func(“平均值”、参数、kwargs、[“仅数值”])
1203尝试:
1204返回自我。赛顿将军(
验证\u groupby\u func中的C:\ProgramData\Anaconda3\lib\site packages\pandas\compat\numpy\function.py(名称、参数、kwargs,允许)
375“numpy操作无效”
376“带groupby.Use.groupby(…)。”
-->377“{func}()”.格式(func=name)
378             )
379         )

我不确定是否正确理解了这个问题,但是,为了解决这个问题(尤其是错误),使用:
df.groupby(['Segment'])['Fun | not Fun'、'Pro-garden | Pro-home'].mean()
应该不会有问题,因为默认行为是
skipna=True
for
mean()
。下面是一个例子:

import pandas as pd
a = {'a':[1,1,1,2,2,2],'data':[np.nan,10,20,20,30,10],'data_2':[10,20,30,np.nan,10,20]}
df = pd.DataFrame(a)

print(df.groupby('a',as_index=False)['data','data_2'].mean())
输出:

   a  data  data_2
0  1  15.0    20.0
1  2  20.0    15.0

这是熊猫身上的一只虫子。看到了吗

变通办法
  • 改用
#定义辅助函数
def自定义_平均值(df):
返回df.平均值(skipna=True)
#而不是
df.平均值(skipna=真)
#使用
df.agg(自定义平均值)

(注意:可能是
skipna=True
pandas.mean()
的默认值,尽管出于某种原因,显示的默认值为
skipna=None
)我也遇到了同样的问题,在我的例子中,我可以通过不尝试将操作的输出作为新列添加到现有数据帧中来解决

by_row_index = data.groupby(data.index)
data_means   = by_row_index.mean()

用适当的方法创建一个新的数据框,然后我可以从中绘图。

我认为这是一个bug,
skipna=True
与每个组的
mean
这可能是相关的:
df.groupby('Segment').mean()
工作正常。您不需要
skipna=True