根据字符串列表过滤熊猫中的数据框
Posted
技术标签:
【中文标题】根据字符串列表过滤熊猫中的数据框【英文标题】: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。 【参考方案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 列成为默认索引列对吗?以上是关于根据字符串列表过滤熊猫中的数据框的主要内容,如果未能解决你的问题,请参考以下文章