数据:
Suppose we have a dataframe like this:
name value
'hi' 1
'hi' 2
'hi' 3
'hello' 5
'hello' 6
'hello' 8
如何找到组内差异最大的组名?
((在上面的示例中,组内的最大差值为3,因此如何从名称列中选择'hello'?)
您可以执行apply(np.ptp)
并使用idxmax()
:
name_with_max_var = df.groupby('name')['value'].apply(np.ptp).idxmax()
df[df.name == name_with_max_var]
输出:
name value
3 'hello' 5
4 'hello' 6
5 'hello' 8
您可以获得像ths这样的单个字符串:
df.groupby('name')['value'].agg(np.ptp).idxmax()
输出:
"'hello'"
详细信息:] >>
[groupby
名称和使用agg
的np.ptp
返回,然后选择具有最大值的索引。
您可以这样操作:
df.assign(diff = df.groupby('name')['value'] .transform(np.ptp))\ .query('diff == diff.max()')
输出:
] >>name value diff 3 'hello' 5 3 4 'hello' 6 3 5 'hello' 8 3
详细信息:
使用groupby
和transform
查找差异,使用np.ptp
,将该值作为差异分配给每个记录,然后np.ptp
数据框以找到差异等于最大差异的位置
数据:
query
使用groupby计算最小值和最大值以及差异,并对差异值进行排序。
df = pd.DataFrame({'name':['hi', 'hi', 'hi', 'hello', 'hello', 'hello'], 'value':[1,2,3,5,6,8]})
仅提取差异最大的字符串:
pd.DataFrame(df.groupby('name').agg('value').max() - df.groupby('name').agg('value').min()).sort_values(by='value')
数据: