根据现有数据框中的 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 的新变量

将 dict 元组拆分为数据框中的单个记录

Pyspark - 基于数据框中的 2 列的不同记录

lapply - 根据当前变量创建新变量,有条件地基于第二个数据框中的信息

根据 pandas 数据框中的条件将 value_counts 与 groupby 函数一起使用并插入新列

有没有比在 python 中使用 loc 更快的方法来根据现有数据框填充数据框中的新列?