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 和过滤熊猫的主要内容,如果未能解决你的问题,请参考以下文章

如何在熊猫中过滤 groupby 的结果

Groupby 并根据熊猫数据框中的其他列比较/过滤特定组

多列上的熊猫 groupby

Pandas groupby 对象过滤

熊猫 .plot.hist() 和 .groupby()

熊猫:groupby 和转换与日期时间