pandas ValueError:转换不能产生聚合结果

dai*_*yue 6 python dataframe python-3.x pandas 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
Run Code Online (Sandbox Code Playgroud)

我在尝试

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)
Run Code Online (Sandbox Code Playgroud)

但我有一个错误,

ValueError: transforms cannot produce aggregated results
Run Code Online (Sandbox Code Playgroud)

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

jez*_*ael 3

问题是groupby.applyreturn DataFrame,而不是DataFrameGroupByobject:

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
Run Code Online (Sandbox Code Playgroud)

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

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]
Run Code Online (Sandbox Code Playgroud)