首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >过滤Pandas数据框中添加的唯一值

过滤Pandas数据框中添加的唯一值
EN

Stack Overflow用户
提问于 2020-03-11 22:31:10
回答 2查看 80关注 0票数 1

我想知道我需要做什么才能过滤数据帧,保持Name列的唯一值,从Value列添加值,并添加一个新列来计算每个Name的外观

我所拥有的是:

代码语言:javascript
复制
     Name Type  Value
0   apple    A      1
1  banana    B      3
2   apple    A      2
3    pear    P      4
4   apple    A      6
5  carrot    C      3
6  banana    B      2

我想把它过滤成这样:

代码语言:javascript
复制
     Name Type  AddedValue  Occurrences
0   apple    A      9       3
1  banana    B      5       2
2    pear    P      4       1
3  carrot    C      3       1

我该怎么做呢?我曾尝试使用where条件集构思一个.join方法,但我无法使其工作,我确信问题在于我正在尝试转换pythonic思维,而肯定有一条panda指令可以通过优雅的向量运算或类似的操作来解决我的问题

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2020-03-11 22:36:20

尝试groupby方法:

代码语言:javascript
复制
df.groupby(["Name","Type"]).agg(["count","sum"])

结果:

代码语言:javascript
复制
            Value    
            count sum
Name   Type          
apple  A        3   9
banana B        2   5
carrot C        1   3
pear   P        1   4

但是,如果您想展平列/索引,请使用:

代码语言:javascript
复制
df2 = df.groupby(["Name","Type"]).agg(["count","sum"]).reset_index(drop=False)

df2.columns = [' '.join(col).strip() for col in df2.columns.values]

输出:

代码语言:javascript
复制
     Name Type  Value count  Value sum
0   apple    A            3          9
1  banana    B            2          5
2  carrot    C            1          3
3    pear    P            1          4

更优雅的解决方案,感谢@piRSquared:

代码语言:javascript
复制
df2 = df.groupby(['Name', 'Type']).Value.agg([('AddedValue', 'sum'), ('Occurences', 'count')]).reset_index(drop=False)

输出:

代码语言:javascript
复制
     Name Type  AddedValue  Occurences
0   apple    A           9           3
1  banana    B           5           2
2  carrot    C           3           1
3    pear    P           4           1
票数 4
EN

Stack Overflow用户

发布于 2020-03-11 22:57:31

是的,就像ipj已经回答的那样,你可以在Pandas Groupby中尝试groupby方法。

代码语言:javascript
复制
df = df.groupby(["Name","Type"]).agg(["count","sum"])
df.columns = df.columns.droplevel(0)
df = df.rename({"count": "AddedValue", "sum": "Occurrences"}, axis=1)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60638431

复制
相关文章

相似问题

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