根据现有数据框中的 WeekDays 拆分并创建新数据框
Posted
技术标签:
【中文标题】根据现有数据框中的 WeekDays 拆分并创建新数据框【英文标题】:Split and create new dataframe based on WeekDays from existing dataframe 【发布时间】:2020-11-15 18:31:35 【问题描述】:我需要根据工作日拆分数据框, 实际的数据框是这样的,
df = pd.DataFrame('values': [10,5,30,44,52,6,7,85,9,1,1,1,13,14,1,16])
df['weekdays'] = ['Monday','Tuesday','Wednesay','Thursday','Friday','saturday','sunday',
'Tuesday','Wednesay','Thursday','Friday','saturday','sunday',
'Monday','Tuesday','Wednesday']
values weekdays
0 10 Monday
1 5 Tuesday
2 30 Wednesay
3 44 Thursday
4 52 Friday
5 6 saturday
6 7 sunday
7 85 Tuesday
8 9 Wednesay
9 1 Thursday
10 1 Friday
11 1 saturday
12 13 sunday
13 14 Monday
14 1 Tuesday
15 16 Wednesday
如何根据工作日拆分数据框,如下所示?我尝试将数据框拆分为每行 7 行,但这会添加连续一周的数据,所以如何不添加连续一周的数据和像下面这样拆分数据框?提前感谢您的帮助。
new_df_1
new_df_2
new_df_3
【问题讨论】:
【参考方案1】:使用Series.shift
+ Series.eq
+ Series.cumsum
创建一个分组器grp
,然后使用此分组器对数据帧进行分组,并使用字典推导将每个分组的帧存储在字典中:
grp = df['weekdays'].shift().eq('sunday').cumsum()
dfs = f'dfk+1': g for k, g in df.groupby(grp)
结果:
print(dfs['df1'])
values weekdays
0 10 Monday
1 5 Tuesday
2 30 Wednesay
3 44 Thursday
4 52 Friday
5 6 saturday
6 7 sunday
print(dfs['df2'])
values weekdays
7 85 Tuesday
8 9 Wednesay
9 1 Thursday
10 1 Friday
11 1 saturday
12 13 sunday
print(dfs['df3'])
values weekdays
13 14 Monday
14 1 Tuesday
15 16 Wednesday
【讨论】:
以上是关于根据现有数据框中的 WeekDays 拆分并创建新数据框的主要内容,如果未能解决你的问题,请参考以下文章
如果现有变量位于数据框中的两个值之间,则创建等于 1 的新变量
lapply - 根据当前变量创建新变量,有条件地基于第二个数据框中的信息