根据字符串列表过滤熊猫中的数据框

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 列成为默认索引列对吗?

以上是关于根据字符串列表过滤熊猫中的数据框的主要内容,如果未能解决你的问题,请参考以下文章

如何按字符串过滤熊猫数据框?

按列表过滤熊猫数据框

从存储为熊猫数据框中的字符串的列表中提取项目

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

按字符串长度对熊猫系列中的列表进行排序

熊猫数据框 - 按字符串过滤/选择列是不是保留顺序?