我具有以下数据框,我需要在该月和该年的最后一周填充1,在同一年和一年中将其余周填充为0
df:
date total
02/01/00 28.000568
09/01/00 28.000568
16/01/00 28.000568
23/01/00 28.000568
30/01/00 28.000568
06/02/00 12.500612
13/02/00 12.500612
输出:
date total flg
02/01/00 28.000568 0
09/01/00 28.000568 0
16/01/00 28.000568 0
23/01/00 28.000568 0
30/01/00 28.000568 1
06/02/00 12.500612 0
13/02/00 12.500612 0
请您提出建议。
答案 0 :(得分:1)
转换为datetime
,然后查找月份在行与行之间的变化:
d = pd.to_datetime(df['date'],dayfirst=True).dt.month
df['flag'] = d.ne(d.shift(-1)).astype(int)
>>> df
date total flag
0 02/01/00 28.000568 0
1 09/01/00 28.000568 0
2 16/01/00 28.000568 0
3 23/01/00 28.000568 0
4 30/01/00 28.000568 1
5 06/02/00 12.500612 0
6 13/02/00 12.500612 1
请注意,我是分开进行的,以免更改数据框中的date
格式。您也可以就地进行:
df['date'] = pd.to_datetime(df['date'],dayfirst=True)
df['flag'] = df['date'].dt.month.ne(df['date'].dt.month.shift(-1)).astype(int)
还请注意,即使最后一行不在您期望的输出中,也将对其进行标记。从技术上讲,这是第二个月的最后一个条目