欠落しているすべての日付データフレームの前日の行を複製する

バビロンによると

入力パンダデータフレームのサンプルを次に示します。

**LastUpdate**                         **Whatever**                 ...

2017-12-30                              xxx                          ...

2017-12-30                              yyy                          ...

2017-12-30                              zzz                          ...

2018-01-01                              yyy                          ...

2018-01-03                              zzz                          ...

予想されるDF(出力)は次のとおりです。

**LastUpdate**                         **Whatever**                 ...

2017-12-30                              xxx                          ...

2017-12-30                              yyy                          ...

2017-12-30                              zzz                          ...

2017-12-31                              xxx                          ...

2017-12-31                              yyy                          ...

2017-12-31                              zzz                          ...

2018-01-01                              yyy                          ...

2018-01-02                              yyy                          ...

2018-01-03                              zzz                          ...

ご覧のとおり、データの欠落している日は単に前日の行を複製するため、欠落している日を(すべての)前日のデータで埋めるだけです1日あたりの行数が異なる可能性があるため、実際には役に立ちません。

重要な注意2日間で1日以上欠落している可能性があります(2018-01-01から2018-01-05になる可能性があるため、これら2日間の欠落しているすべての日を同じデータで追加する必要があります( 2018-01-01とまったく同じ行数/コンテンツ)で、データが利用可能な最終日です。

私はいくつかの調査を行い、resampleffillreset_indexメソッド考え出しましたが、一意の日付インデックスが必要なため、特定のケースに適合しないようです。これは、1日に複数の行がある可能性があるため、ここでは当てはまりません。関連付けられています。

私がこれまでに試したこと:

df['Last Update'] = pd.to_datetime(df['Last Update'])
df.set_index("Last Update", inplace=True)
dfResult = df.resample('D').ffill().reset_index()

これは得られますcannot reindex a non-unique index with a method or limit(そしてそれは完全に理にかなっています)が、私がやろうとしていることを達成する方法を本当に理解することはできません。不明な点がある場合、または追加情報が必要な場合は、サポートをお願いします。

cs95

セットアップ

# This solution should also work for multiple columns.
# Setup.
df['Whatever2'] = df['Whatever'].map({'xxx':'a', 'yyy':'b', 'zzz':'c'})
df

  LastUpdate Whatever Whatever2
0 2017-12-30      xxx         a
1 2017-12-30      yyy         b
2 2017-12-30      zzz         c
3 2018-01-01      yyy         b
4 2018-01-05      zzz         c
5 2018-01-06      xxx         a
6 2018-01-06      xxx         a
7 2018-01-09      yyy         b

解決

使用set_index+ unstack、その後、reindexそしてstack再び。

# If required, convert "LastUpdate" to `datetime`.
# df['LastUpdate'] = pd.to_datetime(df['LastUpdate'], errors='coerce')

(df.set_index(['LastUpdate', df.groupby('LastUpdate').cumcount()])
   .unstack(1, fill_value='')
   .reindex(pd.date_range(df['LastUpdate'].min(), df['LastUpdate'].max()))
   .ffill()
   .replace('', np.nan)
   .stack(1)
   .reset_index(level=1, drop=True)
   .rename_axis('LastUpdate').reset_index())

   LastUpdate Whatever Whatever2
0  2017-12-30      xxx         a
1  2017-12-30      yyy         b
2  2017-12-30      zzz         c
3  2017-12-31      xxx         a
4  2017-12-31      yyy         b
5  2017-12-31      zzz         c
6  2018-01-01      yyy         b
7  2018-01-02      yyy         b
8  2018-01-03      yyy         b
9  2018-01-04      yyy         b
10 2018-01-05      zzz         c
11 2018-01-06      xxx         a
12 2018-01-06      xxx         a
13 2018-01-07      xxx         a
14 2018-01-07      xxx         a
15 2018-01-08      xxx         a
16 2018-01-08      xxx         a
17 2018-01-09      yyy         b

詳細

まず、インデックスを設定します。cumcount繰り返し日付の数を取得するために使用します。これは、新しい日付を何回繰り返す必要があるかを決定するために必要です。

df.groupby('LastUpdate').cumcount().to_numpy()
# array([0, 1, 2, 0, 0, 0, 1, 0])

df.set_index(['LastUpdate', df.groupby('LastUpdate').cumcount()])

             Whatever Whatever2
LastUpdate                     
2017-12-30 0      xxx         a
           1      yyy         b
           2      zzz         c
2018-01-01 0      yyy         b
2018-01-05 0      zzz         c
2018-01-06 0      xxx         a
           1      xxx         a
2018-01-09 0      yyy         b

次に、を使用しますunstack私はを使用しfill_value=''て、次のステップ(フォワードフィル)のブロックとして機能します。

_.unstack(1, fill_value='')


           Whatever           Whatever2      
                  0    1    2         0  1  2
LastUpdate                                   
2017-12-30      xxx  yyy  zzz         a  b  c
2018-01-01      yyy                   b      
2018-01-05      zzz                   c      
2018-01-06      xxx  xxx              a  a   
2018-01-09      yyy                   b      

reindex不足している日付を含めるために使用できるようになりました。

_.reindex(pd.date_range(df['LastUpdate'].min(), df['LastUpdate'].max()))

           Whatever           Whatever2          
                  0    1    2         0    1    2
2017-12-30      xxx  yyy  zzz         a    b    c
2017-12-31      NaN  NaN  NaN       NaN  NaN  NaN
2018-01-01      yyy                   b          
2018-01-02      NaN  NaN  NaN       NaN  NaN  NaN
2018-01-03      NaN  NaN  NaN       NaN  NaN  NaN
2018-01-04      NaN  NaN  NaN       NaN  NaN  NaN
2018-01-05      zzz                   c          
2018-01-06      xxx  xxx              a    a     
2018-01-07      NaN  NaN  NaN       NaN  NaN  NaN
2018-01-08      NaN  NaN  NaN       NaN  NaN  NaN
2018-01-09      yyy                   b          

ここで、フォワードフィルを使用して、昨日のi番目のデータを欠落している日付の対応する位置に割り当てます。

_.ffill()

           Whatever           Whatever2      
                  0    1    2         0  1  2
2017-12-30      xxx  yyy  zzz         a  b  c
2017-12-31      xxx  yyy  zzz         a  b  c
2018-01-01      yyy                   b      
2018-01-02      yyy                   b      
2018-01-03      yyy                   b      
2018-01-04      yyy                   b      
2018-01-05      zzz                   c      
2018-01-06      xxx  xxx              a  a   
2018-01-07      xxx  xxx              a  a   
2018-01-08      xxx  xxx              a  a   
2018-01-09      yyy                   b      

フィラー値をNaN、およびに置き換えますstack

_.replace('', np.nan).stack(1)

             Whatever Whatever2
2017-12-30 0      xxx         a
           1      yyy         b
           2      zzz         c
2017-12-31 0      xxx         a
           1      yyy         b
           2      zzz         c
2018-01-01 0      yyy         b
2018-01-02 0      yyy         b
2018-01-03 0      yyy         b
2018-01-04 0      yyy         b
2018-01-05 0      zzz         c
2018-01-06 0      xxx         a
           1      xxx         a
2018-01-07 0      xxx         a
           1      xxx         a
2018-01-08 0      xxx         a
           1      xxx         a
2018-01-09 0      yyy         b

その後、インデックスをクリーンアップします。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

日付列の値が欠落しているデータフレームIDを更新しています

分類Dev

営業日インデックスに基づいて、データフレーム内の複数の列に欠落している日付を代入する

分類Dev

欠落している日時値に基づいて空のデータフレーム行を追加する

分類Dev

データフレームの欠落している行を修復する

分類Dev

データフレームで欠落している日付をどのように管理しますか?

分類Dev

日付インデックスと欠落している日付を含むPandasデータフレームで次の日付を選択する方法

分類Dev

データフレームに欠落しているものとして複数の値を定義する

分類Dev

Python Pandas:連続して欠落している平日の日付を返し、データフレーム内の欠落している日付の横にレートを割り当てます

分類Dev

欠落している日付のフォワードフィルを使用して、すべてのIDの日次データを追加します

分類Dev

Pythonパンダ:欠落している日付、時系列の行をgroupbyデータフレームに挿入します

分類Dev

データフレームに欠落しているデータの行を作成する方法

分類Dev

データが欠落しているデータフレームに値が「0」の行を追加する

分類Dev

Rのデータフレームで値が欠落している行の割合を決定します

分類Dev

データフレームの欠落している行を埋める

分類Dev

pandasデータフレームで欠落している年と四半期の行を作成する方法

分類Dev

パンダのデータフレーム内の間隔の日付で欠落している観測値を埋めます

分類Dev

平均を使用してデータフレームに欠落している日付を入力します

分類Dev

欠落している行の明示的な表現をデータフレームに追加しますか?

分類Dev

その中の日付フレームの日付で欠落している日付を見つける

分類Dev

データフレームに欠落している日を追加する

分類Dev

Rデータフレームの欠落している行を埋めます

分類Dev

欠落している日付をマルチレベルデータフレームに代入する

分類Dev

欠落している日付インデックスをデータフレームに追加する

分類Dev

パンダ-2つのデータフレームを日付で比較し、欠落している全体を見つけます

分類Dev

Pythonの別のデータフレームの複数の列に基づいて、欠落している値をマージして埋めます

分類Dev

欠落している日付をパンダデータフレームに追加する

分類Dev

Sparkデータフレーム列に欠落している日付を入力する

分類Dev

Pandasデータフレームに欠落している日付を代入する

分類Dev

日付が欠落しているデータフレームを時系列に変換します

Related 関連記事

  1. 1

    日付列の値が欠落しているデータフレームIDを更新しています

  2. 2

    営業日インデックスに基づいて、データフレーム内の複数の列に欠落している日付を代入する

  3. 3

    欠落している日時値に基づいて空のデータフレーム行を追加する

  4. 4

    データフレームの欠落している行を修復する

  5. 5

    データフレームで欠落している日付をどのように管理しますか?

  6. 6

    日付インデックスと欠落している日付を含むPandasデータフレームで次の日付を選択する方法

  7. 7

    データフレームに欠落しているものとして複数の値を定義する

  8. 8

    Python Pandas:連続して欠落している平日の日付を返し、データフレーム内の欠落している日付の横にレートを割り当てます

  9. 9

    欠落している日付のフォワードフィルを使用して、すべてのIDの日次データを追加します

  10. 10

    Pythonパンダ:欠落している日付、時系列の行をgroupbyデータフレームに挿入します

  11. 11

    データフレームに欠落しているデータの行を作成する方法

  12. 12

    データが欠落しているデータフレームに値が「0」の行を追加する

  13. 13

    Rのデータフレームで値が欠落している行の割合を決定します

  14. 14

    データフレームの欠落している行を埋める

  15. 15

    pandasデータフレームで欠落している年と四半期の行を作成する方法

  16. 16

    パンダのデータフレーム内の間隔の日付で欠落している観測値を埋めます

  17. 17

    平均を使用してデータフレームに欠落している日付を入力します

  18. 18

    欠落している行の明示的な表現をデータフレームに追加しますか?

  19. 19

    その中の日付フレームの日付で欠落している日付を見つける

  20. 20

    データフレームに欠落している日を追加する

  21. 21

    Rデータフレームの欠落している行を埋めます

  22. 22

    欠落している日付をマルチレベルデータフレームに代入する

  23. 23

    欠落している日付インデックスをデータフレームに追加する

  24. 24

    パンダ-2つのデータフレームを日付で比較し、欠落している全体を見つけます

  25. 25

    Pythonの別のデータフレームの複数の列に基づいて、欠落している値をマージして埋めます

  26. 26

    欠落している日付をパンダデータフレームに追加する

  27. 27

    Sparkデータフレーム列に欠落している日付を入力する

  28. 28

    Pandasデータフレームに欠落している日付を代入する

  29. 29

    日付が欠落しているデータフレームを時系列に変換します

ホットタグ

アーカイブ