繁体   English   中英

过滤 Pandas 数据框以添加唯一值

[英]filter a Pandas dataframe for added unique values

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

我所拥有的是:

     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

我想把它过滤成这样:

     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 思想,其中肯定有一个解决我的问题的熊猫指令使用优雅的向量操作或类似的东西

提前致谢

尝试groupby方法:

df.groupby(["Name","Type"]).agg(["count","sum"])

结果:

            Value    
            count sum
Name   Type          
apple  A        3   9
banana B        2   5
carrot C        1   3
pear   P        1   4

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

df2 = df.groupby(["Name","Type"]).agg(["count","sum"]).reset_index(drop=False)

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

输出:

     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,更优雅的解决方案:

df2 = df.groupby(['Name', 'Type']).Value.agg([('AddedValue', 'sum'), ('Occurences', 'count')]).reset_index(drop=False)

输出:

     Name Type  AddedValue  Occurences
0   apple    A           9           3
1  banana    B           5           2
2  carrot    C           3           1
3    pear    P           4           1

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

df = df.groupby(["Name","Type"]).agg(["count","sum"])
df.columns = df.columns.droplevel(0)
df = df.rename({"count": "AddedValue", "sum": "Occurrences"}, axis=1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM