【问题标题】:Split and create new dataframe based on WeekDays from existing dataframe根据现有数据框中的 WeekDays 拆分并创建新数据框
【发布时间】: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

【问题讨论】:

    标签: python pandas pandas-groupby data-science


    【解决方案1】:

    使用Series.shift + Series.eq + Series.cumsum 创建一个分组器grp,然后使用此分组器对数据帧进行分组,并使用字典推导将每个分组的帧存储在字典中:

    grp = df['weekdays'].shift().eq('sunday').cumsum()
    dfs = {f'df{k+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
    

    【讨论】:

      猜你喜欢
      • 2021-08-02
      • 2022-01-18
      • 2021-09-08
      • 1970-01-01
      • 2020-10-25
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      相关资源
      最近更新 更多