2016-09-27 30 views
3

このようなPandasのデータがあります。Python - Pandas DataFrameのデータに対してFIFO操作を実行

| DAY | IN | OUT | 
|-----|-----|-----| 
| 1 | 100 | 50 | 
| 2 | 20 | 60 | 
| 3 | 10 | 5 | 
| 4 | 5 | 15 | 

これは、アイテムがキューに入った日とそのキューから出された日数を表します。物事が待ち行列に入るとき、私は実際にそれらを追跡する方法を持っていないので、それらが順番に処理され、FIFO(先入れ先出し)タイプの操作があると仮定します。

私がやりたいことは、FIFO操作を実行することで、操作の実行日数がわかります。したがって、例として...

| DAY | IN | OUT | 1 | 2 | 3 | 
|-----|-----|-----|-----|-----|-----| 
| 1 | 100 | 50 | 50 | 0 | 0 | 
| 2 | 20 | 60 | 10 | 50 | 0 | 
| 3 | 10 | 5 | 0 | 5 | 0 | 
| 4 | 5 | 15 | 0 | 10 | 5 | 

私が追加した最後の3列は、何日に何個のプロセスが出てきたかを表します。口頭に言ったように...

  • 1日目に100が入り、50が出てきました。したがって、1日で50件が処理され、50件がキューに残りました。
  • 2日目に20名が入院し、60名が出産しました。したがって、50の以前のキューは使い果たされ、それらは2日間かかりました。出てきた残りの10日は1日で完了しました。 10は待ち行列に残っていた。
  • 3日目に10人が入り、5人が出てきました。したがって、10の以前のキューは5に縮小されました。出てきた5つのキューは2日間で競合しました。 15は待ち行列に残った。
  • 4日目に5人が入場し、15人が出てきた。したがって、15の以前のキューが使い果たされました。 5日目は完了まで3日かかり、10日目は2日かかりました。 5はキューに残りました。
  • など

誰もが、好ましくは、パンダを使用して、ニシキヘビの方法でこれを行うにはいくつかのコード(または擬似コード)を持っていますか?

答えて

1

私は必要なものを正確にコーディングしました。期待した結果が返されます(私はそれを検証するためにいくつかの行を追加しました)。あなたは潜時の3日以上が必要な場合は、(それが何をするかを理解するのは簡単です、それは常に同じものである)にもSupply列を追加することができます

import pandas as pd 

df = pd.DataFrame() 
df['Day'] = [1, 2, 3, 4, 5, 6, 7] 
df['In'] = [100, 20, 10, 5, 10, 10, 10] 
df['Out'] = [50, 60, 5, 15, 5, 0, 20] 

df['Supply'] = df.apply(lambda row: row['In']-row['Out'], axis=1) 
df['Supply'] = df['Supply'].cumsum().shift(1).fillna(0) 
df['1'] = df.apply(lambda row: row['Out'] - row['Supply'] if row['Supply'] < row['Out'] else 0, axis=1) 
df['Supply-2'] = df.apply(lambda row: row['Supply'] - row['Out'] + row['1'], axis=1) 
df['Supply-2'] = df['Supply-2'].shift(1).fillna(0) 
df['2'] = df.apply(lambda row: row['Out'] - row['1'] - row['Supply-2'], axis=1) 
df['3'] = df.apply(lambda row: row['Out'] - row['1'] - row['2'], axis=1) 

print(df[['Day', 'In', 'Out', '1', '2', '3']]) 

戻り値:

Day In Out  1  2  3 
0 1 100 50 50.0 0.0 0.0 
1 2 20 60 10.0 50.0 0.0 
2 3 10 5 0.0 5.0 0.0 
3 4 5 15 0.0 10.0 5.0 
4 5 10 5 0.0 5.0 0.0 
5 6 10 0 0.0 0.0 0.0 
6 7 10 20 0.0 10.0 10.0 

説明:すべてが約Supplyであり、Inの量はOutではありません。 (はInの年齢を知らないので)時間情報を追加するために、ここに2日間滞在したSupplyの量を数値化するSupply-2列を追加します。 3つの最後の列の量を知ることは、数学的なことです。

ya!

関連する問題