前提・実現したいこと
以前の質問で各月ごとに同じ日のデータを一つの塊としてシャッフルしたのですが、平日と休日が混ざっているので、今回はこれを平日は平日だけ、休日は休日だけでシャッフルしたいのですが、うまくいきませんでした。
該当のソースコード
平日と休日の区別がないシャッフル
import pandas as pd import itertools import numpy as np csv = pd.read_csv('sample.csv', parse_dates=[0], index_col=0) df=csv.resample('H').mean() #元のデータは30分刻みのデータなのでここで1時間ごとのデータにしています df = df.reset_index() df['weekday'] =df['時間'].dt.weekday #曜日を示す列を作成(0が月曜日、6が日曜日) df = df.set_index("時間") #ここから下は全く同じ def shuffle_days(df_month): groups = [df for _, df in df_month.groupby('D')] random.shuffle(groups) return pd.concat(groups).reset_index(drop=True) df = df.reset_index() df['Y'] = df['時間'].dt.year df['M'] = df['時間'].dt.month df['D'] = df['時間'].dt.day df = df.groupby(['Y', 'M']).apply(shuffle_days) df = df.drop(['Y', 'M', 'D'], axis=1).reset_index(drop=True) print(df)
試したこと
平日か土日かを判定する関数
DATE = "yyyymmdd" # 日付は8桁文字列の形式 def isBizDay(DATE): Date = datetime.date(int(DATE[0:4]), int(DATE[4:6]), int(DATE[6:8])) if Date.weekday() >= 5 : return 0 else: return 1
この関数のようなものを使って平日と休日を分けようとしたのですが、上手く組み込めませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー