Python 返回每个月的最大日期的数据帧行,并且仅当该行位于该月的最后2周时返回

Python 返回每个月的最大日期的数据帧行,并且仅当该行位于该月的最后2周时返回,python,python-3.x,pandas,date,dataframe,Python,Python 3.x,Pandas,Date,Dataframe,我想返回行,方法是检查该月的最长日期,然后重新检查该日期是否在该月的最后两周内。下面是我正在使用的数据帧: 最终定价日期高低 1777.44 2018-07-31 1801.83 1739.32 1797.17 2018-06-27 1798.44 1776.02 1834.33 2018-05-28 1836.56 1786.00 1823.29 2018-04-03 1841.00 1821.50 1847.75 2018-03-29 1847.77 1818.92 import calen

我想返回行,方法是检查该月的最长日期,然后重新检查该日期是否在该月的最后两周内。下面是我正在使用的数据帧:

最终定价日期高低

1777.44 2018-07-31 1801.83 1739.32

1797.17 2018-06-27 1798.44 1776.02

1834.33 2018-05-28 1836.56 1786.00

1823.29 2018-04-03 1841.00 1821.50

1847.75 2018-03-29 1847.77 1818.92

import calendar

df.index = pd.to_datetime(df.index)
df['day'] = pd.to_numeric(df.index.day)
df['days_in_month'] = df.apply(lambda row : calendar.monthrange(row.name.year,row.name.month)[1], axis = 1)
df['first_day'] = df.apply(lambda row : calendar.monthrange(row.name.year,row.name.month)[0], axis = 1)
df['days_in_last_week'] = ((df['days_in_month'])%7+df['first_day'])%7
df[df['day'] > (df['days_in_month'] - df['days_in_last_week'])]
我已参考了其他答案,并找到了从“日期”列中查找最大日期的方法。代码如下:

df.index=df['date']

打印(df.groupby(df.index.month).apply(lambda x:x.index.max())

但是,这导致:

日期
1  2019-07-31
2  2019-06-27
3  2019-05-28
4  2019-04-03
5 2019-03-29

相反,我希望返回这些日期出现的行中的所有值,但是日期应该在过去两周内。我不知道该怎么做

因此,预期产出是:

最终定价日期高低

1777.44 2018-07-31 1801.83 1739.32

1797.17 2018-06-27 1798.44 1776.02

1834.33 2018-05-28 1836.56 1786.00

1847.75 2018-03-29 1847.77 1818.92

import calendar

df.index = pd.to_datetime(df.index)
df['day'] = pd.to_numeric(df.index.day)
df['days_in_month'] = df.apply(lambda row : calendar.monthrange(row.name.year,row.name.month)[1], axis = 1)
df['first_day'] = df.apply(lambda row : calendar.monthrange(row.name.year,row.name.month)[0], axis = 1)
df['days_in_last_week'] = ((df['days_in_month'])%7+df['first_day'])%7
df[df['day'] > (df['days_in_month'] - df['days_in_last_week'])]

希望这能奏效!在将日期设置为索引后执行此操作。

上周-日历周或一个月的最后7天?我尝试了此方法,但它会为我提供每个月最后一周的所有日期的数据,而我只希望获得该周的最长日期。此外,在某些月份,它不会给出结果。我看到您编辑为最后两周,我提议的代码不起作用。此外,你还需要按照我在每个月分组后提出的建议,就像你描述的那样,保留每个月的最高日期。是的,甚至在编辑之前。上个星期我试过你的解决办法。但去年几乎没有什么记录丢失。就像我有超过10年的数据。因此,您的解决方案只对某些日期有效,但在某些日期失败。对此表示抱歉。你需要给我一个失败样本的例子,也许我可以看看。