查找组内差异最大的组名

问题描述 投票:1回答:3
Suppose we have a dataframe like this:

name   value
'hi'    1
'hi'    2
'hi'    3
'hello' 5
'hello' 6 
'hello'  8

如何找到组内差异最大的组名?

((在上面的示例中,组内的最大差值为3,因此如何从名称列中选择'hello'?)

pandas
3个回答
0
投票

您可以执行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

0
投票

您可以获得像ths这样的单个字符串:

df.groupby('name')['value'].agg(np.ptp).idxmax()

输出:

"'hello'"

详细信息:] >>

[groupby名称和使用aggnp.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

详细信息:

] >>

使用groupbytransform查找差异,使用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')

0
投票

数据:

© www.soinside.com 2019 - 2024. All rights reserved.