首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >大熊猫群与最大群

大熊猫群与最大群
EN

Stack Overflow用户
提问于 2022-03-04 10:53:40
回答 3查看 293关注 0票数 0

我有以下DataFrame:

代码语言:javascript
运行
复制
import pandas as pd

data = {'id': ['A', 'B', 'C', 'D', 'E'],
        'c1': [4,7,9,0,3],
        'c2': [1,8,3,0,2]}

data = pd.DataFrame(data)

我想要groupby('id'),并取c1c2之间的最大值。

期望的输出:

代码语言:javascript
运行
复制
data = {'id': ['A', 'B', 'C', 'D','E'],
        'c': [4,8,9,0,3]}

data = pd.DataFrame(data)
EN

回答 3

Stack Overflow用户

发布于 2022-03-04 10:55:17

首先通过id创建id,获取每个行的最大值,然后聚合max (如果可能的话) id是重复的值:

代码语言:javascript
运行
复制
df = data.set_index('id').max(axis=1).groupby(level=0).max().reset_index(name='c')
print (df)
  id  c
0  A  4
1  B  8
2  C  9
3  D  0
4  E  3

如果id不像示例数据中那样重复,则删除聚合:

代码语言:javascript
运行
复制
df = data.set_index('id').max(axis=1).reset_index(name='c')
print (df)
  id  c
0  A  4
1  B  8
2  C  9
3  D  0
4  E  3
票数 1
EN

Stack Overflow用户

发布于 2022-03-04 10:55:34

使用meltGroupBy.max

代码语言:javascript
运行
复制
(data.melt(id_vars='id', value_name='c')
     .groupby('id', as_index=False)['c'].max()
)

产出:

代码语言:javascript
运行
复制
  id  c
0  A  4
1  B  8
2  C  9
3  D  0
4  E  3
票数 1
EN

Stack Overflow用户

发布于 2022-03-04 11:07:50

这样做有很多种方法,您不一定需要groupby,而只需要一个基于"c1“和"c2”值的新列。

我喜欢在这些情况下使用np.where:

代码语言:javascript
运行
复制
import pandas as pd
import numpy as np

data = {'id': ['A', 'B', 'C', 'D', 'E'],
        'c1': [4,7,9,0,3],
        'c2': [1,8,3,0,2]}

data = pd.DataFrame(data)

data ["c"] = np.where (data["c1"] >= data["c2"], data ["c1"], data["c2"])
del data ["c1"]
del data ["c2"]

第一个参数是要评估的条件,第二个参数是条件匹配时的返回值,第三个参数是"else“。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71350347

复制
相关文章

相似问题

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