首先,我有一个包含以下列的数据框:

issue_date | issue | special  |  group


多行可以包含相同的group。对于每个组,我想获取其最大日期:

date_current = history.groupby('group').agg({'issue_date' : [np.min, np.max]})
date_current = date_current.issue_date.amax


之后,我想按其max_date-months过滤每个组:

date_before  = date_current.values - pd.Timedelta(weeks=4*n)


即,对于每个组,我要舍弃issue_date < date_before列的行:

hh = history[history['issue_date'] > date_before]



  ValueError:长度必须匹配才能进行比较


但最后一行不起作用,因为长度不匹配。这是预料之中的,因为我的数据框中有x行,但是date_before的长度等于我的数据框中的组数。

给定数据,我想知道如何按组执行此减法或过滤。我是否必须以某种方式迭代数据帧?

最佳答案

您可以按照尝试的类似方式解决此问题。

我创建了自己的示例数据,如下所示:

history

  issue_date  group
0 2014-01-02      1
1 2014-01-02      2
2 2016-02-04      3
3 2016-03-05      2


您使用group_by并申请执行您尝试的操作。首先,您要防御要应用的功能。然后,group_by.apply将其应用于每个组。在这种情况下,我使用n = 1来证明这一点:

def date_compare(df):

    date_current = df.issue_date.max()
    date_before  = date_current - pd.Timedelta(weeks=4*1)
    hh = df[df['issue_date'] > date_before]

    return hh

hh = history.groupby('group').apply(date_compare)

        issue_date  group
group
1     0 2014-01-02      1
2     3 2016-03-05      2
3     2 2016-02-04      3


因此,第2组中较小的日期无法幸免。

希望对您有所帮助,并且遵循您要遵循的相同逻辑。

关于python - 将值(value)与群体进行比较- Pandas ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44136313/

10-09 06:50