Numpy 操作对 groupby 无效。改用 .groupby(...).mean() ,这就是我所做的

Posted

技术标签:

【中文标题】Numpy 操作对 groupby 无效。改用 .groupby(...).mean() ,这就是我所做的【英文标题】:Numpy operations are not valid with groupby. Use .groupby(...).mean() instead, which is what I did 【发布时间】:2020-03-25 04:10:14 【问题描述】:

我想根据它们的段Segment 获取以下数据帧people_preferences 的前两列中每一列的平均值。

      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_preferences.groupby('Segment', as_index=False).mean( skipna = True),但它返回:UnsupportedFunctionCall: numpy operations are not valid with groupby. Use .groupby(...).mean() instead

这是完整的错误信息:

---------------------------------------------------------------------------
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         )

【问题讨论】:

我认为这是错误,skipna = True 每组带有mean 这可能是相关的:github.com/pandas-dev/pandas/issues/19806 df.groupby('Segment').mean() 按预期工作。你不需要skipna=True 【参考方案1】:

这是熊猫中的一个错误。见mean with skipna either True or False on groupby gives error

解决方法

改用pandas.aggregate
# define helper function
def custom_mean(df):
    return df.mean(skipna=True)

# instead of 
df.mean(skipna=True)

# use 
df.agg(custom_mean)

(注意:skipna=True 可能是pandas.mean() 的默认值,尽管由于某种原因docs 显示默认值skipna=None

【讨论】:

【参考方案2】:

我不确定是否正确理解了问题,但是,要解决问题(不是特别是错误),使用: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

【讨论】:

【参考方案3】:

我遇到了同样的问题,在我的情况下,我可以通过不尝试将操作的输出添加为现有数据框中的新列来解决这个问题。相反,我跑了

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

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

【讨论】:

以上是关于Numpy 操作对 groupby 无效。改用 .groupby(...).mean() ,这就是我所做的的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 thunk 操作对 mapDispatchToProps 进行单元测试

url_for()中的坑,url_for操作对象是函数,而不是route里的路径

如何仅使用堆栈操作对堆栈进行排序?

如何使用 Redux connect 中的操作对测试组件进行快照?

应用man九章和一些基本操作对linux的初步了解

java 流操作对文件的分割和合并的实例详解_java - JAVA