熊猫ValueError:转换无法产生汇总结果

时间:2018-08-09 13:37:18

标签: python python-3.x pandas dataframe pandas-groupby

我有以下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

我想知道如何解决该问题。

2 个答案:

答案 0 :(得分:2)

IIUC,您必须在groupby对象中使用transform,因此只需使用现有的任何索引重新组合

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

答案 1 :(得分:1)

问题是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]