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)
我想知道如何解决这个问题。
问题是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)