【问题标题】:group by filtered pandas dataframe and select latest in each group按过滤的熊猫数据框分组并在每组中选择最新的
【发布时间】:2020-09-18 05:31:54
【问题描述】:

我遇到了过滤数据框和 groupby 的问题
假设我有这个数据框

id 产品日期 0 220 6647 2015-09-01 1 220 6647 2014-09-03 2 220 6647 2014-10-16 3 826 3380 2014-11-11 4 826 3380 2015-12-09 5 826 3380 2015-05-19 6 901 4555 2015-09-01 7 901 4555 2014-10-05 8 901 4555 2014-11-01

我想先选择 2015 年的行,然后选择 groupby id 并获取最新的日期

我已阅读 this article,它在整个 df 上都非常有效
但如果我首先尝试像这样过滤 df,它似乎不起作用

my_date = datetime.datetime(2014, 12, 31)
df = df[df.date>my_date]

现在如果我运行以下代码

df.loc[df.groupby('id').date.idxmax()]

它给了我以下错误

尝试获取空序列的 argmax

任何帮助将不胜感激:) 谢谢

【问题讨论】:

    标签: python dataframe pandas-groupby


    【解决方案1】:

    好的,我知道了
    我发布的示例取自另一篇文章,效果很好
    我自己的例子有点不同
    我的数据框分组项是 taype 类别
    如果我将它作为对象保留它会起作用

    【讨论】:

      【解决方案2】:

      df = df[date>my_date] 中,您只有date,而不是df.date,所以这可能是导致错误的原因。

      这段代码:

      import pandas as pd
      from io import StringIO
      from datetime import datetime
      
      txt = '''id     product   date
      220    6647     2015-09-01
      220    6647     2014-09-03
      220    6647     2014-10-16
      826    3380     2014-11-11
      826    3380     2015-12-09
      826    3380     2015-05-19
      901    4555     2015-09-01
      901    4555     2014-10-05
      901    4555     2014-11-01'''
      
      df = pd.read_fwf(StringIO(txt))
      df['date'] = pd.to_datetime(df['date']) # convert date to datetime
      
      my_date = datetime(2014, 12, 31)
      df = df[df.date>my_date]
      
      print(df.loc[df.groupby('id').date.idxmax()])
      

      打印:

          id  product       date
      0  220     6647 2015-09-01
      4  826     3380 2015-12-09
      6  901     4555 2015-09-01
      

      【讨论】:

      • 谢谢,但这不是问题......只是我忘了在日期之前输入 df
      猜你喜欢
      • 2017-05-22
      • 1970-01-01
      • 2017-11-30
      • 2021-03-13
      • 1970-01-01
      • 2019-10-14
      • 1970-01-01
      • 2016-09-01
      • 2021-08-11
      相关资源
      最近更新 更多