groupby 和过滤熊猫
Posted
技术标签:
【中文标题】groupby 和过滤熊猫【英文标题】:groupby and filter pandas 【发布时间】:2018-12-09 02:12:37 【问题描述】:df:
make country other_columns sale
honda tokyo data 1
honda hirosima data 0
toyota tokyo data 1
toyota hirosima data 0
suzuki tokyo data 0
suzuki hirosima data 0
ferrari tokyo data 1
ferrari hirosima data 0
nissan tokyo data 1
nissan hirosima data 0
条件: 保留有 1,0 的对
想要的输出
make country other_columns sale
honda tokyo data 1
honda hirosima data 0
toyota tokyo data 1
toyota hirosima data 0
ferrari tokyo data 1
ferrari hirosima data 0
nissan tokyo data 1
nissan hirosima data 0
我尝试过的(显然不起作用)
outdf = df.groupby('sale').filter(lambda x: x > 0)
我应该将这两个列(“销售”和“制造”)分组吗?
【问题讨论】:
a pair is make + 2 state? 只是制作,但我需要所有的列 @AntonvBR 编辑问题 【参考方案1】:这是使用groupby
+ set
的解决方案。这应该是可扩展的并且不需要订购:
s = df.groupby('make')['sale'].apply(set)
res = df[df['make'].map(s) >= 0, 1]
print(res)
make country other_columns sale
0 honda tokyo data 1
1 honda hirosima data 0
2 toyota tokyo data 1
3 toyota hirosima data 0
6 ferrari tokyo data 1
7 ferrari hirosima data 0
8 nissan tokyo data 1
9 nissan hirosima data 0
【讨论】:
【参考方案2】:确实,您需要groupby
,但在“make”列上,您可以将filter
与从“sale”列创建tuple
的函数一起使用:
outdf = df.groupby('make').filter(lambda x: tuple(x.sale)== (1,0))
你会得到预期的输出:
make country other_columns sale
0 honda tokyo data 1
1 honda hirosima data 0
2 toyota tokyo data 1
3 toyota hirosima data 0
6 ferrari tokyo data 1
7 ferrari hirosima data 0
8 nissan tokyo data 1
9 nissan hirosima data 0
如果 1 和 0 之间的顺序并不总是满足相同的“品牌”,您可以先在“销售”列上使用 sort_values
【讨论】:
是的,这就是我需要的以上是关于groupby 和过滤熊猫的主要内容,如果未能解决你的问题,请参考以下文章