[英]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.