首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Pandas查找分组行的最小值

使用Pandas查找分组行的最小值
EN

Stack Overflow用户
提问于 2017-01-04 03:30:52
回答 3查看 12.3K关注 0票数 9

这可能是一个微不足道的问题,但我仍然在努力弄清楚pandas/numpy。

因此,假设我有一个具有以下结构的表:

代码语言:javascript
运行
复制
group_id | col1 | col2 | col3 |  "A"   |  "B"
   x     |   1  |   2  |  3   |  NaN   |   1
   x     |   3  |   2  |  3   |   1    |   1 
   x     |   4  |   2  |  3   |   2    |   1
   y     |   1  |   2  |  3   |  NaN   |   3 
   y     |   3  |   2  |  3   |   3    |   3 
   z     |   3  |   2  |  3   |   10   |   2
   z     |   2  |   2  |  3   |   6    |   2
   z     |   4  |   2  |  3   |   4    |   2
   z     |   4  |   2  |  3   |   2    |   2

请注意,有一个对每行中的元素进行分组的group_id。因此,在开始时,我有列group_id和col1-col3的值。

然后,对于每一行,如果col1、col2或col3的值为1,则"A“为NaN,否则该值基于公式(与此处无关,因此我将一些数字放在适当的位置)。

为此,我知道如何使用:

代码语言:javascript
运行
复制
df["A"] = np.where(((df['col1'] == 1)|(df['col2']== 1) | (df['col3']) == 1))), NaN, value)

但是对于"B“列,我需要用来自A列的特定组的最小值来填充它。

因此,例如,对于具有组X的所有行,"B“等于" 1”,因为列A中所有组"x“行的最小值等于1。

类似地,对于组"y“中的行,最小值是3,对于组"z”,最小值是2。这让我更加困惑,因为特定组的行数可能会有不同的大小。

如果它们都是相同的大小,我可以说用预先设置的范围内的最小值填充它。

我希望这是有意义的;如果我应该提供一个更清楚的例子或澄清任何事情,请让我知道!

EN

Stack Overflow用户

发布于 2017-01-04 03:52:12

如果['col1', 'col2', 'col3']

  • see等于== 1

  • see,则只关注1,如果有eq(1)等于1,则使用axis=1 loc进行分配

代码语言:javascript
运行
复制
anyone = df[['col1', 'col2', 'col3']].eq(1).any(1)
df.loc[anyone, 'A'] = np.nan

numpy等价物

代码语言:javascript
运行
复制
anyone = (df[['col1', 'col2', 'col3']].values == 1).any(1)
df.A = np.where(anyone, np.nan, df.A)
票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41450963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档