pandas ValueError:转换无法产生聚合结果

Posted

技术标签:

【中文标题】pandas ValueError:转换无法产生聚合结果【英文标题】:pandas ValueError: transforms cannot produce aggregated results 【发布时间】:2019-01-17 00:12:57 【问题描述】:

我有以下df

type      id      date         code
exact    9720    2017-10-01    515
exact    9720    2017-10-01    515
fuzzy    8242    2017-11-01    122
fuzzy    8242    2017-11-01    122

我在尝试

exact_rows = df['type'] != 'fuzzy'
grouped = df.loc[~exact_rows].groupby('id').apply(
            lambda g: g.sort_values('date', ascending=True))

a = np.where(grouped['code'].transform('nunique') == 1, 20, 0)

但我遇到了一个错误,

ValueError: transforms cannot produce aggregated results

我想知道如何解决这个问题。

【问题讨论】:

【参考方案1】:

IIUC,你必须在 groupby 对象中使用转换,所以只需使用现有的任何索引重新组合

grouped.groupby(grouped.index)['code'].transform('nunique')

【讨论】:

【参考方案2】:

问题是groupby.apply 返回DataFrame,而不是DataFrameGroupBy 对象:

grouped = df.loc[~exact_rows].groupby('id').apply(
            lambda g: g.sort_values('date', ascending=True))

print (grouped)
         type    id        date  code
id                                   
8242 2  fuzzy  8242  2017-11-01   122
     3  fuzzy  8242  2017-11-01   122

因此,对每组值进行排序的解决方案是在groupby('id') 之前使用DataFrame.sort_values 两列:

exact_rows = df['type'] != 'fuzzy'
grouped = df.loc[~exact_rows].sort_values(['id','date'], ascending=True).groupby('id')

a = np.where(grouped['code'].transform('nunique') == 1, 20, 0)
print (a)
[20 20]

【讨论】:

以上是关于pandas ValueError:转换无法产生聚合结果的主要内容,如果未能解决你的问题,请参考以下文章

无法将字符串转换为 pandas 中的浮点数(ValueError)

尝试将 Dictionary 转换为 DataFrame Pandas 时出现 ValueError

Pandas - ValueError:无法从重复的轴重新索引

出现错误:“ValueError:如果使用所有标量值,则必须传递索引”将 ndarray 转换为 pandas Dataframe

访问 pandas.read_excel() 转换器中 ValueError 的详细信息

Pandas ValueError:只能将大小为1的数组转换为Python标量