【问题标题】:Filtering dataframe in pandas based on a list of strings根据字符串列表过滤熊猫中的数据框
【发布时间】:2019-03-04 17:02:04
【问题描述】:

我最近开始探索熊猫,我正在尝试从扇区.py 导入水果列表并将其用作过滤器以生成仅显示列表中水果的项目表。我没有得到想要的输出我的代码有问题吗?

在sector.py中

Fruits=['Apple','Orange','Pineapples']

在calculator.py中

import sector
import pandas as pd

pdmart = pd.read_csv('supermarket.csv')
pdextract = pdmart.groupby('item')['price'].sum()

Fruits = pdextract[pdextract.isin(sector.Fruits)]
print Fruits

当前输出:

Series([], Name: price, dtype: float64)

期望的输出:

Item         Price
Apple        12.0
Orange       7.0
Pineapples   15.0

【问题讨论】:

  • 只在 groupby 之前过滤,应该这样做
  • 或在 groupby 之后使用列表重新索引,这将确保您为完全丢失的组显示 NaN。

标签: python python-2.7 pandas indexing pandas-groupby


【解决方案1】:

GroupBy 对象上应用isin 没有意义。您可以在 GroupBy 对象的 index 上使用布尔索引:

Fruits = pdextract[pdextract.index.isin(sector.Fruits)]

您还可以在您的GroupBy 操作之前过滤系列:

pdextract = pdmart.loc[pdmart['item'].isin(sector.Fruits)]\
                  .groupby('item')['price'].sum()

【讨论】:

  • 嗨!感谢您的回复,您能否再解释一下为什么我不能在将 isin 应用于分组之前对其进行分组?
  • @SamT,你可以。我的第一个解决方案是在GroupBy 之后。请注意 pdextract 是您问题中的 GroupBy 对象。
  • 酷!谢谢!另外,如果我要总结所有水果的值,我可以对变量 pdextract 再次执行 .sum() 吗?意思是说:Fruits 34.0 抱歉,如果我含糊其辞,这是我的第一语言..
  • @SamT,当然,试一试。但如果您有新问题,您应该询问new question。这不是论坛。
  • @jpp 这是因为在执行 pdextract = pdmart.groupby('item')['price'].sum() 之后 groupby 列成为默认索引列对吗?
猜你喜欢
  • 2021-12-01
  • 1970-01-01
  • 2020-08-08
  • 2019-04-24
  • 2020-05-05
  • 2014-12-27
  • 2019-12-09
  • 2016-08-31
  • 2019-05-21
相关资源
最近更新 更多