【问题标题】:How do I iterate through a pandas group and check to see if a string is in each group?如何遍历 pandas 组并检查每个组中是否有字符串?
【发布时间】:2016-10-24 23:11:05
【问题描述】:

我有一个 Pandas 数据框,其中包含特定日期的一堆记录。我需要按日期对它们进行分组,并检查第二天是否有前一天的记录,特别是我需要输出哪些记录被删除。

这是一个示例数据集:

Date        Item
20160101    apple
20160101    pear
20160101    banana
20160102    apple
20160102    pear
20160102    beans

我需要找出每个日期发生的差异,因此对于 2016 年 1 月 2 日的这个示例,添加了一个字符串“beans”,并从组中删除了一个“香蕉”。

到目前为止,我的代码是:

groups = frame['Item'].groupby(frame['Date'])

for date, item in groups:
    for i in item:
        if i not in item[:-1]:
            print date, item, 'Deleted'

这似乎不起作用。我应该期待:

20160102 , banana, Deleted

感谢您的帮助!

【问题讨论】:

    标签: python python-2.7 pandas


    【解决方案1】:
    diffs = frame.groupby(frame.columns.tolist()).size().unstack(fill_value=0).diff()
    diffs
    

    diffs.mask(diffs.eq(0)).stack().map({-1: 'deleted', 1: 'added'})
    
    Date      Item  
    20160102  banana    deleted
              beans       added
    dtype: object
    

    【讨论】:

    • 这很聪明,太棒了!
    • 很好的解决方案!不过,我遇到了 fill_value 部分的问题。它说“unstack() 有一个意外的关键字参数 'fill_value''”有什么想法吗?
    • 可能的版本。你可以试试unstack().fillna(0)
    • 没关系,升级 pandas 成功了!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 2021-08-03
    • 2021-02-05
    • 1970-01-01
    • 2013-04-20
    相关资源
    最近更新 更多