python - 当 groupby 另一个时, Pandas 在组中获得最少的一列

标签 python pandas pandas-groupby

我有一个看起来像这样的 Pandas 数据框:

      c     y
0     9     0
1     8     0
2     3     1
3     6     2
4     1     3
5     2     3
6     5     3
7     4     4
8     0     4
9     7     4

我想对 y 进行分组并获取 c 的最小值和最大值,这样我的新数据框将如下所示:

      c     y     min   max
0     9     0     8     9
1     8     0     8     9
2     3     1     3     3   
3     6     2     6     6 
4     1     3     1     5
5     2     3     1     5
6     5     3     1     5
7     4     4     0     7
8     0     4     0     7
9     7     4     0     7

我尝试使用 df['min'] = df.groupby(['y'])['c'].min() 但这给了我一些奇怪的结果。前 175 行填充在 min 列中,但随后所有其余行都变为 NaN。这不是您应该使用 groupby 方法的方式吗?

最佳答案

选项 1 使用转换

In [13]: dfc = df.groupby('y')['c']

In [14]: df.assign(min=dfc.transform(min), max=dfc.transform(max))
Out[14]:
   c  y  max  min
0  9  0    9    8
1  8  0    9    8
2  3  1    3    3
3  6  2    6    6
4  1  3    5    1
5  2  3    5    1
6  5  3    5    1
7  4  4    7    0
8  0  4    7    0
9  7  4    7    0

或者

In [15]: df['min' ] = dfc.transform('min')

In [16]: df['max' ] = dfc.transform('max')

选项 2 使用 join 和 agg

In [30]: df.join(df.groupby('y')['c'].agg(['min', 'max']), on='y')
Out[30]:
   c  y  min  max
0  9  0    8    9
1  8  0    8    9
2  3  1    3    3
3  6  2    6    6
4  1  3    1    5
5  2  3    1    5
6  5  3    1    5
7  4  4    0    7
8  0  4    0    7
9  7  4    0    7

选项 3 使用合并和聚合

In [28]: df.merge(df.groupby('y')['c'].agg(['min', 'max']), right_index=True, left_on='y')
Out[28]:
   c  y  min  max
0  9  0    8    9
1  8  0    8    9
2  3  1    3    3
3  6  2    6    6
4  1  3    1    5
5  2  3    1    5
6  5  3    1    5
7  4  4    0    7
8  0  4    0    7
9  7  4    0    7

关于python - 当 groupby 另一个时, Pandas 在组中获得最少的一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51074911/

相关文章:

python - 如何在 Visual Studio Code 中设置 Python 语言特定的制表符间距?

python - 从python中的类列表中随机选择x个项目

python - 将 JSON 字符串插入到 PostgreSQL 表列中

python - ImportError HDFStore 需要 PyTables 没有名为表的模块

python - 使用pandas GroupBy或pivot_table查找每日最低值(value)

python - TensorFlow:使用自己的数据集实现单层感知器/多层感知器

python - 如何跳过循环中的项目

python - 基于 Pandas 中列值的颜色时间序列

python - Pandas 中的累积总和从零开始,以除最后一个条目以外的所有组的总和结束

python - 如何根据复杂的列条件集聚合重复行