他の列のシーケンスの条件に基づくグループ化の合計

デンマーク語

以下に示すデータフレームがあります。

FPFパターンしかないことに注意してください。つまり、データにはFPFパターンのみが含まれます。

    ID  Status  Date    Duration
0   1   F   2018-06-22  nan
1   1   P   2018-08-22  61.00
2   1   F   2018-10-22  61.00
3   3   F   2018-11-20  nan
4   3   P   2018-12-20  30.00
5   3   F   2019-03-20  90.00
6   4   F   2018-06-10  nan
7   4   P   2018-08-10  61.00
8   4   F   2018-12-10  122.00
9   7   F   2018-04-10  nan
10  7   P   2018-08-10  122.00
11  7   F   2018-11-10  92.00
12  7   P   2019-08-10  273.00
13  7   F   2019-10-10  61.00

上記のデータフレームから、以下のデータフレームを準備したいと思います。

ID        F_P_Duration    F_F_Duration                          
1         61.0            122.0
3         30.0            120.0
4         61.0            183.0
7_1       122.0           214.0
7_2       273.0           334.0

ここで、F_P_DurationはFからPまでの日数です。

F_F_Durationは、そのIDのFPFパターンにおけるFからFまでの日数です。

キングフィッシャー

ID列に応じて、1つの行から期間を取得するか、前の行と合計するかのいずれかであるようです。本当のトリックは、アレンジとラベリングにあります。以下のコードはかなり自明であるはずだと思います。

# imports
import numpy as np
import pandas as pd

# Setup the data and the DataFrame.
data = [[1, 'F', '2018-06-22', np.nan],
        [1, 'P', '2018-08-22', 61.00],
        [1, 'F', '2018-10-22', 61.00],
        [3, 'F', '2018-11-20', np.nan],
        [3, 'P', '2018-12-20', 30.00],
        [3, 'F', '2019-03-20', 90.00],
        [4, 'F', '2018-06-10', np.nan],
        [4, 'P', '2018-08-10', 61.00],
        [4, 'F', '2018-12-10', 122.00],
        [7, 'F', '2018-04-10', np.nan],
        [7, 'P', '2018-08-10', 122.00],
        [7, 'F', '2018-11-10', 92.00],
        [7, 'P', '2019-08-10', 273.00],
        [7, 'F', '2019-10-10', 61.00]]
df = pd.DataFrame(data=data, columns=['ID', 'Status', 'Date', 'Duration'])

# Add a helper column for summing F_F durations.
df['DurShiftSum'] = df['Duration'] + df['Duration'].shift(1)
# F_P duration just appears to be the duration at P.
df.loc[df['Status']=='P', 'F_P_Duration'] = df.loc[df['Status']=='P', 'Duration']
# F_F durations is the F duration plus the previous P duration.
df.loc[(df['Status']=='F')&(df['Duration'].notnull()), 'F_F_Duration'] = 
df.loc[(df['Status']=='F')&(df['Duration'].notnull()), 'DurShiftSum']
# Compress the DataFrame and drop unneeded columns.
df['F_F_Duration'] = df['F_F_Duration'].fillna(method='bfill', limit=1)
df = df.dropna(subset=['F_P_Duration'])
df = df.drop(labels=['Date', 'Duration', 'DurShiftSum'], axis=1)

# An unfortunate for-loop through the unique IDs.
# If your dataset is very big this might not be ideal.
df['ID'] = df['ID'].astype(str)
for xid in df['ID'].unique():
    if len(df.loc[df['ID']==xid]) > 1:
        len_frame = len(df.loc[df['ID']==xid])
        new_ids = [xid+f'_{i}' for i in range(1, len_frame+1)]
        df.loc[df['ID']==xid, 'ID'] = new_ids

あなたが提供したサンプルデータを考えると、私はあなたの望む結果と一致します。隣接する2つの行を合計するヘルパー列を作成し、適切な値をF_P列とF_F列に転送してから、クリーンアップしてフォーマットするだけです。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

パンダのグループ化と条件に基づく計算

分類Dev

パンダのグループ化-別の列に基づくグループ化された合計のパーセントとしての値

分類Dev

列のグループの条件に基づくDataFrameスタイリング

分類Dev

シーケンスに基づいてデータをグループ化し、他の列でグループ化する方法

分類Dev

列の値に基づくパンダのグループ化

分類Dev

1つの列の合計に基づいて、パンダの他の2つの列でグループ化された新しい列を追加します

分類Dev

数字キーに基づくオブジェクトの配列のグループ化と合計

分類Dev

SQLServerの条件付き行グループ化に基づく列値の乗算

分類Dev

SQLServerの条件付き行グループ化に基づく列値の乗算

分類Dev

別の列の条件に基づいたパンダのグループ化

分類Dev

年と他の列でグループ化し、特定の条件のパンダに基づいて平均を計算します

分類Dev

計算列のグループ化に基づくdb2照会

分類Dev

列の合計値に基づいて行をグループ化する

分類Dev

PySpark:観測シーケンスに基づくグループタイプの番号グループ

分類Dev

パンダの複数の条件に基づくグルービーとカウントの合計

分類Dev

特定の条件に基づくグループ化

分類Dev

複雑な条件に基づくLINQのグループ化

分類Dev

rのグループ化または条件に基づくrowsum

分類Dev

別のグループ化に基づく条件付きグループ化

分類Dev

複数の列、計算頻度、およびパーセンテージに基づくグループ化

分類Dev

Pandasデータセットのグループ化条件に基づいて列の合計とカウントを見つける方法は?

分類Dev

他の列の条件に基づく累積合計

分類Dev

if条件に基づく2番目のテーブルのR合計列

分類Dev

行と列に基づくSSRS列のグループ化

分類Dev

SQLステートメント-列タイプの合計に基づく

分類Dev

SQL-オプションのフラグに基づくグループ化

分類Dev

その列による列グループの値に基づく合計のMysqlクエリ

分類Dev

条件に基づく列の合計

分類Dev

異なるグループの配列に基づくforeachループ内の合計

Related 関連記事

  1. 1

    パンダのグループ化と条件に基づく計算

  2. 2

    パンダのグループ化-別の列に基づくグループ化された合計のパーセントとしての値

  3. 3

    列のグループの条件に基づくDataFrameスタイリング

  4. 4

    シーケンスに基づいてデータをグループ化し、他の列でグループ化する方法

  5. 5

    列の値に基づくパンダのグループ化

  6. 6

    1つの列の合計に基づいて、パンダの他の2つの列でグループ化された新しい列を追加します

  7. 7

    数字キーに基づくオブジェクトの配列のグループ化と合計

  8. 8

    SQLServerの条件付き行グループ化に基づく列値の乗算

  9. 9

    SQLServerの条件付き行グループ化に基づく列値の乗算

  10. 10

    別の列の条件に基づいたパンダのグループ化

  11. 11

    年と他の列でグループ化し、特定の条件のパンダに基づいて平均を計算します

  12. 12

    計算列のグループ化に基づくdb2照会

  13. 13

    列の合計値に基づいて行をグループ化する

  14. 14

    PySpark:観測シーケンスに基づくグループタイプの番号グループ

  15. 15

    パンダの複数の条件に基づくグルービーとカウントの合計

  16. 16

    特定の条件に基づくグループ化

  17. 17

    複雑な条件に基づくLINQのグループ化

  18. 18

    rのグループ化または条件に基づくrowsum

  19. 19

    別のグループ化に基づく条件付きグループ化

  20. 20

    複数の列、計算頻度、およびパーセンテージに基づくグループ化

  21. 21

    Pandasデータセットのグループ化条件に基づいて列の合計とカウントを見つける方法は?

  22. 22

    他の列の条件に基づく累積合計

  23. 23

    if条件に基づく2番目のテーブルのR合計列

  24. 24

    行と列に基づくSSRS列のグループ化

  25. 25

    SQLステートメント-列タイプの合計に基づく

  26. 26

    SQL-オプションのフラグに基づくグループ化

  27. 27

    その列による列グループの値に基づく合計のMysqlクエリ

  28. 28

    条件に基づく列の合計

  29. 29

    異なるグループの配列に基づくforeachループ内の合計

ホットタグ

アーカイブ