首先,我有一个包含以下列的数据框:
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/