2017-10-03 8 views
0

私はうまくいけば、非常に簡単な質問があります。私の会社では、実際に使用できない形式で時間レポートを作成する人道と呼ばれる従業員シフト管理ソフトウェアを使用しています。パンダ - このデータを扱う最良の方法

私は分析の残りの部分でそれを適用することができるように私はそれを掃除する必要がありますが、私はこれを行うための最善の方法で紛失しており、私はそれを把握することはできません。データは次のように探し始めます:

Name | Total | Start (Sep 1, 2017) | End (Sep 1, 2017) | Hrs (Sep 1, 2017) 
    User 1 | 12  | 06:00    |  18:30   | 13 
    User 2 | 0  |      |     | 

は明らかに多くのより多くのユーザーと、より多くの日付がありますが、それは追加の日付の列にわたって繰り返されます。ここでは、私は今のところ、それをクリーンアップするためにやっていることです:

data = pd.read_csv("TestReport.csv") 
del data["Total"] 

cols = [c for c in data.columns if c.lower()[:3] != 'hrs'] 
data = data[cols] 

data.rename(columns=lambda x: re.sub('Start \(', '', x), inplace=True) 
data.rename(columns=lambda x: re.sub('End \(', '', x), inplace=True) 
data.rename(columns=lambda x: re.sub('\)', '', x), inplace=True) 
data.fillna(0, inplace=True) 

私の最後の必要性は、開始の日付フィールドを作成し、各ユーザーのための毎日のための時間を終了することです。私のデータは今、純粋な月、日、年として列名を持つことが最良の方法は、各行を反復し、行の値+列名を追加し、日付時刻に変換し、それが動作すると思います。

しかし、私はこれをやり遂げるための最善の方法ではない、あるいはこれが最善の方法でさえあれば。

私にとって最も重要なことは、各ユーザーが、異なるレコードへの移行中に効率をさらに分析するために使用できるように、開始日と終了日を合わせた時間があることです。

はありがとう、私はそれ以上の詳細を提供することができれば、私に教えてください!

アンディ・マクマスター *******************例を示すように編集された******************** *

最終目標は、各ユーザーの一連の日付範囲を作成することです。これらのシリーズを全従業員の作業記録を保持するデータフレームと比較し、そのレコードを管理したユーザー(チームリーダー)に各レコードを割り当てる必要があります。

エンドは、理想的には

Name | Total | Start (Sep 1, 2017) | End (Sep 1, 2017) | Hrs (Sep 1, 2017) 
    User 1 | 12  | 06:00 Sep 1, 2017 | 18:30 Sep 1, 2017 | 13 
    User 2 | 0  |      |     | 
+0

あなたの説明でも、あなたが望むものは私には分かりません。あなたが与えたデータから得られるもののサンプルを見せてもらえますか? – piRSquared

+0

@piRSquaredシフトのために完全な日付フィールドが必要です。私たちには、シフト中に結合されたグループを監視するチームリーダーがいて、その効率性を監視する必要があります。多くの制限のため、これを行う唯一の方法は、記録時間に基づいてシフトスケジュールを組み合わせることです。システムを分けて、私はすべての開始時刻と終了時刻を見て、どのレコードが誰のためにいつ来るのかを見ることができる必要があります。理想的には - 私は日/月/年である列名を比較のために各行の時間と組み合わせて見る必要があります。 –

+0

私の最終的なゲームは、各ユーザーのシリーズを作成し、開始日の時間をパンダの日付範囲に組み込み、それらの日付範囲を使用してすべての作業記録を持つデータフレームを比較し、日付範囲を使用して、そのレコードを管理しました。 –

答えて

0

すべてのだろう - 私は、少なくとも私の意見では、この問題を解決するための最良の方法を発見しました。私は同じデータクリーニングに固執しますが、このような小さな断片で終わり、時間と日付を一緒に追加するための実行可能なリストを作成します。私は、各ユーザーを経るように私のコードはすべてゼロ回を削除するか、道フィルタを作成するreworkign Iのみ、関与します

   Name  Sep 1, 2017  Sep 1, 2017  Sep 2, 2017 \ 
0  User 1    Sep 1, 2017 6:00 Sep 1, 2017 18:30 Sep 2, 2017 6:00 
1  User 2    Sep 1, 2017 0  Sep 1, 2017 0  Sep 2, 2017 0 
2  User 3    Sep 1, 2017 0  Sep 1, 2017 0  Sep 2, 2017 0 
3  User 4    Sep 1, 2017 0  Sep 1, 2017 0  Sep 2, 2017 0 
4  User 5    Sep 1, 2017 6:00 Sep 1, 2017 12:00 Sep 2, 2017 6:00 

次のステップ:

month_list = data.columns.tolist() 
month_list.remove('Name') 

new_list = [] 

for i in month_list: 
    if i not in new_list: 
     new_list.append(i) 

for i in new_list: 
    data[i] = i + " " + data[i].astype(str) 

これは、ように見えるデータを生成します彼らが働いた時間を利用しています。

うまくいけば、これは、作業が必要な設計のタイムシートが不適切な人に役立ちます。

関連する問題