使用带有时间列的 Pandas 数据框
Playing with a Pandas Dataframe with Time Column
我正在处理一个大的 pandas 数据框,它有一个时间列(已排序),我想要的是删除任何重复的日期,并且在 1 天的增量内(比如说)。除此之外,我还在寻找的是创建另一列作为标签(基于时间)。所以举一个简单的例子(为了简单起见,我只是在这里保留了时间列:
df:
Time Column
2020-12-05
2020-12-09
2020-12-13
2020-12-18
2020-12-21
2020-12-21
2020-12-23
2020-12-24
2020-12-31
2021-01-04
所以我在这样的输出数据框中寻找的东西(在一天内删除重复项和日期并仅保留第一次出现后 - 在示例中我有 2020-12-23 和 2020-12- 24 并仅保留日期 23)并创建标签列:
df:
Time Column Label
2020-12-05 L1
2020-12-09 L2
2020-12-13 L3
2020-12-18 L4
2020-12-21 L5
2020-12-23 L6
2020-12-31 L7
2021-01-04 L8
不知道如何实现这一点。在这方面的任何帮助将不胜感激。
df['Time_Column']=pd.to_datetime(df['Time_Column'])#Coerce Time_Column to date
df=df[df['Time_Column'].diff(1).dt.days.ne(1)].drop_duplicates()#Remove consecutive dates and duplicates
df=df.assign(Label= 'L'+df['Time_Column'].notna().cumsum().astype(str))#Cumsum the Time_Column
print(df)
Time_Column Label
0 2020-12-05 L1
1 2020-12-09 L2
2 2020-12-13 L3
3 2020-12-18 L4
4 2020-12-21 L5
6 2020-12-23 L6
8 2020-12-31 L7
9 2021-01-04 L8
- 创建一个从时间列中提取日期的新列
- 在此新列中删除重复项
- 删除临时列
(df.assign(dt_day=lambda x: x['time column'].dt.date)
.drop_duplicates('dt_day', keep='first')
.drop(columns=['dt_day']))
我做了这样的事情:
df = pd.DataFrame(dt)
df['time_column'] = pd.to_datetime(df['time_column'])
mdf = df.copy()
mdf = mdf.rename(columns={'time_column': 'date_column'})
myf = df.diff(periods=1)
finDF = myf.join(mdf,how='inner')
mask = ['0 days', '1 days']
finDF = finDF[~finDF['time_column'].isin(mask)]
del finDF['time_column']
finDF=finDF.assign(Label=
'L'+finDF['date_column'].notna().cumsum().astype(str))
finDF
我正在处理一个大的 pandas 数据框,它有一个时间列(已排序),我想要的是删除任何重复的日期,并且在 1 天的增量内(比如说)。除此之外,我还在寻找的是创建另一列作为标签(基于时间)。所以举一个简单的例子(为了简单起见,我只是在这里保留了时间列:
df:
Time Column
2020-12-05
2020-12-09
2020-12-13
2020-12-18
2020-12-21
2020-12-21
2020-12-23
2020-12-24
2020-12-31
2021-01-04
所以我在这样的输出数据框中寻找的东西(在一天内删除重复项和日期并仅保留第一次出现后 - 在示例中我有 2020-12-23 和 2020-12- 24 并仅保留日期 23)并创建标签列:
df:
Time Column Label
2020-12-05 L1
2020-12-09 L2
2020-12-13 L3
2020-12-18 L4
2020-12-21 L5
2020-12-23 L6
2020-12-31 L7
2021-01-04 L8
不知道如何实现这一点。在这方面的任何帮助将不胜感激。
df['Time_Column']=pd.to_datetime(df['Time_Column'])#Coerce Time_Column to date
df=df[df['Time_Column'].diff(1).dt.days.ne(1)].drop_duplicates()#Remove consecutive dates and duplicates
df=df.assign(Label= 'L'+df['Time_Column'].notna().cumsum().astype(str))#Cumsum the Time_Column
print(df)
Time_Column Label
0 2020-12-05 L1
1 2020-12-09 L2
2 2020-12-13 L3
3 2020-12-18 L4
4 2020-12-21 L5
6 2020-12-23 L6
8 2020-12-31 L7
9 2021-01-04 L8
- 创建一个从时间列中提取日期的新列
- 在此新列中删除重复项
- 删除临时列
(df.assign(dt_day=lambda x: x['time column'].dt.date)
.drop_duplicates('dt_day', keep='first')
.drop(columns=['dt_day']))
我做了这样的事情:
df = pd.DataFrame(dt)
df['time_column'] = pd.to_datetime(df['time_column'])
mdf = df.copy()
mdf = mdf.rename(columns={'time_column': 'date_column'})
myf = df.diff(periods=1)
finDF = myf.join(mdf,how='inner')
mask = ['0 days', '1 days']
finDF = finDF[~finDF['time_column'].isin(mask)]
del finDF['time_column']
finDF=finDF.assign(Label=
'L'+finDF['date_column'].notna().cumsum().astype(str))
finDF