新しい列の条件に基づいて値を生成するにはどうすればよいですか?

シャシダール

次のデータフレームがあります。

Hotel_id    Month_Year      Chef_Id  Chef_is_masterchef  Transition
2400188     February-2018   4597566     1                    0
2400188     March-2018      4597566     1                    0
2400188     April-2018      4597566     1                    0
2400188     May-2018        4597566     1                    0
2400188     June-2018       4597566     1                    0
2400188     July-2018       4597566     1                    0
2400188     August-2018     4597566     1                    0
2400188     September-2018  4597566     0                    1
2400188     October-2018    4597566     0                    0
2400188     November-2018   4597566     0                    0
2400188     December-2018   4597566     0                    0
2400188     January-2019    4597566     0                    0
2400188     February-2019   4597566     0                    0
2400188     March-2019      4597566     0                    0
2400188     April-2019      4597566     0                    0
2400188     May-2019        4597566     0                    0


2400614     May-2015        2297544     0                    0
2400614     June-2015       2297544     0                    0
2400614     July-2015       2297544     0                    0
2400614     August-2015     2297544     0                    0
2400614     September-2015  2297544     0                    0
2400614     October-2015    2297544     0                    0
2400614     November-2015   2297544     0                    0
2400614     December-2015   2297544     0                    0
2400614     January-2016    2297544     1                    1
2400614     February-2016   2297544     1                    0
2400614     March-2016      2297544     1                    0

3400624     May-2016        2597531     0                    0
3400624     June-2016       2597531     0                    0
3400624     July-2016       2597531     0                    0
3400624     August-2016     2597531     1                    1

2400133     February-2016   4597531     0                    0
2400133     March-2016      4597531     0                    0
2400133     April-2016      4597531     0                    0
2400133     May-2016        4597531     0                    0
2400133     June-2016       4597531     0                    0
2400133     July-2016       4597531     0                    0
2400133     August-2016     4597531     1                    1
2400133     September-2016  4597531     1                    0
2400133     October-2016    4597531     1                    0
2400133     November-2016   4597531     1                    0
2400133     December-2016   4597531     1                    0
2400133     January-2017    4597531     1                    0
2400133     February-2017   4597531     1                    0
2400133     March-2017      4597531     1                    0
2400133     April-2017      4597531     1                    0
2400133     May-2017        4597531     1                    0

遷移がから起こるとき0〜1または0と1Chef_is_Masterchefの列、この遷移はで示される遷移としてカラム1

実際、元のデータフレームについて、以下で説明するように値が入力される別の列(「Varという名前)を作成することを考えました。

予想されるデータフレーム:

Hotel_id    Month_Year      Chef_Id  Chef_is_masterchef  Transition  Var
2400188     February-2018   4597566     1                    0       -7
2400188     March-2018      4597566     1                    0       -6
2400188     April-2018      4597566     1                    0       -5
2400188     May-2018        4597566     1                    0       -4
2400188     June-2018       4597566     1                    0       -3
2400188     July-2018       4597566     1                    0       -2
2400188     August-2018     4597566     1                    0       -1
2400188     September-2018  4597566     0                    1        0
2400188     October-2018    4597566     0                    0        1
2400188     November-2018   4597566     0                    0        2
2400188     December-2018   4597566     0                    0        3
2400188     January-2019    4597566     0                    0        4
2400188     February-2019   4597566     0                    0        5
2400188     March-2019      4597566     0                    0        6
2400188     April-2019      4597566     0                    0        7
2400188     May-2019        4597566     0                    0        8

2400614     May-2015        2297544     0                    0       -8
2400614     June-2015       2297544     0                    0       -7
2400614     July-2015       2297544     0                    0       -6
2400614     August-2015     2297544     0                    0       -5
2400614     September-2015  2297544     0                    0       -4
2400614     October-2015    2297544     0                    0       -3
2400614     November-2015   2297544     0                    0       -2
2400614     December-2015   2297544     0                    0       -1
2400614     January-2016    2297544     1                    1        0
2400614     February-2016   2297544     1                    0        1
2400614     March-2016      2297544     1                    0        2

3400624     May-2016        2597531     0                    0       -3
3400624     June-2016       2597531     0                    0       -2
3400624     July-2016       2597531     0                    0       -1
3400624     August-2016     2597531     1                    1        0

2400133     February-2016   4597531     0                    0       -6
2400133     March-2016      4597531     0                    0       -5
2400133     April-2016      4597531     0                    0       -4
2400133     May-2016        4597531     0                    0       -3
2400133     June-2016       4597531     0                    0       -2
2400133     July-2016       4597531     0                    0       -1
2400133     August-2016     4597531     1                    1        0
2400133     September-2016  4597531     1                    0        1
2400133     October-2016    4597531     1                    0        2
2400133     November-2016   4597531     1                    0        3
2400133     December-2016   4597531     1                    0        4
2400133     January-2017    4597531     1                    0        5
2400133     February-2017   4597531     1                    0        6
2400133     March-2017      4597531     1                    0        7
2400133     April-2017      4597531     1                    0        8
2400133     May-2017        4597531     1                    0        9

観察された場合、Var列の遷移点で、値をゼロとして指定し、対応する整数値を維持する前後の行に値を指定します。

しかし、以下のコードを使用した後、Var列に問題がありました。

s = df['Chef_is_masterchef'].eq(0).groupby(df['Chef_Id']).transform('sum')
df['var'] = df.groupby('Chef_Id').cumcount().sub(s)

上記のコードからの出力

Hotel_id    Month_Year      Chef_Id  Chef_is_masterchef  Transition  Var
2400188     February-2018   4597566     1                    0       -9
2400188     March-2018      4597566     1                    0       -8
2400188     April-2018      4597566     1                    0       -7
2400188     May-2018        4597566     1                    0       -6
2400188     June-2018       4597566     1                    0       -5
2400188     July-2018       4597566     1                    0       -4
2400188     August-2018     4597566     1                    0       -3
2400188     September-2018  4597566     0                    1       -2
2400188     October-2018    4597566     0                    0       -1
2400188     November-2018   4597566     0                    0        0
2400188     December-2018   4597566     0                    0        1
2400188     January-2019    4597566     0                    0        2
2400188     February-2019   4597566     0                    0        3
2400188     March-2019      4597566     0                    0        4
2400188     April-2019      4597566     0                    0        5
2400188     May-2019        4597566     0                    0        6

2400614     May-2015        2297544     0                    0       -8
2400614     June-2015       2297544     0                    0       -7
2400614     July-2015       2297544     0                    0       -6
2400614     August-2015     2297544     0                    0       -5
2400614     September-2015  2297544     0                    0       -4
2400614     October-2015    2297544     0                    0       -3
2400614     November-2015   2297544     0                    0       -2
2400614     December-2015   2297544     0                    0       -1
2400614     January-2016    2297544     1                    1        0
2400614     February-2016   2297544     1                    0        1
2400614     March-2016      2297544     1                    0        2

3400624     May-2016        2597531     0                    0       -3
3400624     June-2016       2597531     0                    0       -2
3400624     July-2016       2597531     0                    0       -1
3400624     August-2016     2597531     1                    1        0

2400133     February-2016   4597531     0                    0       -6
2400133     March-2016      4597531     0                    0       -5
2400133     April-2016      4597531     0                    0       -4
2400133     May-2016        4597531     0                    0       -3
2400133     June-2016       4597531     0                    0       -2
2400133     July-2016       4597531     0                    0       -1
2400133     August-2016     4597531     1                    1        0
2400133     September-2016  4597531     1                    0        1
2400133     October-2016    4597531     1                    0        2
2400133     November-2016   4597531     1                    0        3
2400133     December-2016   4597531     1                    0        4
2400133     January-2017    4597531     1                    0        5
2400133     February-2017   4597531     1                    0        6
2400133     March-2017      4597531     1                    0        7
2400133     April-2017      4597531     1                    0        8
2400133     May-2017        4597531     1                    0        9

観測された場合、Chef_Id = 4597566の場合、遷移のポイントで、Var列の値がゼロではなく異なることがわかります。

これは問題を引き起こします。なぜなら、移行の時点で、各IDに対して最大3か月前と2か月後を含む行を選択する必要があるからです。また、移行の時点で、次のコードを使用して、IDごとに最大6か月前と5か月後を含む行を選択する必要があります。

df1 = df[df['var'].between(-3, 2)]
print (df1)

df2 = df[df['var'].between(-6, 5)]
print (df2)

だから私に解決策を教えてください。

前もって感謝します!

クリス

IIUC、使用pandas.DataFrame.groupby.transformしてnumpy.arangenumpy.argmax

df["Var"] = df.groupby("Chef_Id")["Transition"].transform(lambda x: np.arange(x.size) - np.argmax(x))
print(df)

出力:

    Hotel_id      Month_Year  Chef_Id  Chef_is_masterchef  Transition  Var
0    2400188   February-2018  4597566                   1           0   -7
1    2400188      March-2018  4597566                   1           0   -6
2    2400188      April-2018  4597566                   1           0   -5
3    2400188        May-2018  4597566                   1           0   -4
4    2400188       June-2018  4597566                   1           0   -3
5    2400188       July-2018  4597566                   1           0   -2
6    2400188     August-2018  4597566                   1           0   -1
7    2400188  September-2018  4597566                   0           1    0
8    2400188    October-2018  4597566                   0           0    1
9    2400188   November-2018  4597566                   0           0    2
10   2400188   December-2018  4597566                   0           0    3
11   2400188    January-2019  4597566                   0           0    4
12   2400188   February-2019  4597566                   0           0    5
13   2400188      March-2019  4597566                   0           0    6
14   2400188      April-2019  4597566                   0           0    7
15   2400188        May-2019  4597566                   0           0    8
16   2400614        May-2015  2297544                   0           0   -8
17   2400614       June-2015  2297544                   0           0   -7
18   2400614       July-2015  2297544                   0           0   -6
19   2400614     August-2015  2297544                   0           0   -5
20   2400614  September-2015  2297544                   0           0   -4
21   2400614    October-2015  2297544                   0           0   -3
22   2400614   November-2015  2297544                   0           0   -2
23   2400614   December-2015  2297544                   0           0   -1
24   2400614    January-2016  2297544                   1           1    0
25   2400614   February-2016  2297544                   1           0    1
26   2400614      March-2016  2297544                   1           0    2
27   3400624        May-2016  2597531                   0           0   -3
28   3400624       June-2016  2597531                   0           0   -2
29   3400624       July-2016  2597531                   0           0   -1
30   3400624     August-2016  2597531                   1           1    0
31   2400133   February-2016  4597531                   0           0   -6
32   2400133      March-2016  4597531                   0           0   -5
33   2400133      April-2016  4597531                   0           0   -4
34   2400133        May-2016  4597531                   0           0   -3
35   2400133       June-2016  4597531                   0           0   -2
36   2400133       July-2016  4597531                   0           0   -1
37   2400133     August-2016  4597531                   1           1    0
38   2400133  September-2016  4597531                   1           0    1
39   2400133    October-2016  4597531                   1           0    2
40   2400133   November-2016  4597531                   1           0    3
41   2400133   December-2016  4597531                   1           0    4
42   2400133    January-2017  4597531                   1           0    5
43   2400133   February-2017  4597531                   1           0    6
44   2400133      March-2017  4597531                   1           0    7
45   2400133      April-2017  4597531                   1           0    8
46   2400133        May-2017  4597531                   1           0    9

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

条件に基づいて新しい列を作成するにはどうすればよいですか?

分類Dev

Pythonの行の値に基づいてID列を生成するにはどうすればよいですか?

分類Dev

PYSPARK:条件に基づいて列の値を更新するにはどうすればよいですか?

分類Dev

Pythonの条件に基づいて、新しい列の列の値を返すにはどうすればよいですか?

分類Dev

他の列の値と一致する行の値に基づいて新しい列を作成するにはどうすればよいですか?

分類Dev

複数の列からの複数の条件に基づいて新しい列を作成するにはどうすればよいですか?

分類Dev

他の列の条件に基づいてデータフレームに新しい列を作成するにはどうすればよいですか?

分類Dev

Rを使用して、範囲内の数値に基づいて新しい列に値を割り当てるにはどうすればよいですか?

分類Dev

条件に基づいてmatlabのテーブルに新しい値を追加するにはどうすればよいですか?

分類Dev

mysqlに条件を追加して、列の値に基づいて異なるテーブルの値を取得するにはどうすればよいですか?

分類Dev

マクロから作成された新しい値に基づいて列の値を更新するにはどうすればよいですか?

分類Dev

別の配列の値に基づいて、配列内の各ActiveRecordに新しい属性を追加するにはどうすればよいですか?

分類Dev

Pysparkのデータフレームの条件に基づいて新しいリスト値を設定するにはどうすればよいですか?

分類Dev

pysparkのウィンドウ上の複数のwhen条件に基づいて新しい列を作成するにはどうすればよいですか?

分類Dev

新しい列に基づいて各行を複製するにはどうすればよいですか?

分類Dev

方程式と他の列の一意の値に基づいて新しい列を作成するにはどうすればよいですか?

分類Dev

Rの既存の列の値に基づいて新しい列を作成するにはどうすればよいですか?

分類Dev

Rの既存の列の値と名前に基づいて新しい列を作成するにはどうすればよいですか?

分類Dev

複数の条件文に基づいて複数の新しい列を作成するにはどうすればよいですか?

分類Dev

Rの複数の条件に基づいて新しい列を作成するにはどうすればよいですか?

分類Dev

別の列の条件に基づいて列を転置するにはどうすればよいですか?

分類Dev

別の列の数値に基づいて新しい列を作成するにはどうすればよいですか

分類Dev

既存の列の値に基づいて新しい列を更新するにはどうすればよいですか?

分類Dev

列の値に基づいて既存のデータフレームに新しい行を追加するにはどうすればよいですか?

分類Dev

Rの行の値に基づいてdata.frameに新しい列を作成するにはどうすればよいですか?

分類Dev

関数の戻り値に基づく値を使用してPythonで新しい列を設定するにはどうすればよいですか?

分類Dev

以前の複数の値のパンダの状態に基づいて新しい列を計算するにはどうすればよいですか

分類Dev

Rの行の値の組み合わせに基づいて新しい変数(列)を作成するにはどうすればよいですか?

分類Dev

SQL Serverの他の列の値に基づいて新しい行を挿入するにはどうすればよいですか?

Related 関連記事

  1. 1

    条件に基づいて新しい列を作成するにはどうすればよいですか?

  2. 2

    Pythonの行の値に基づいてID列を生成するにはどうすればよいですか?

  3. 3

    PYSPARK:条件に基づいて列の値を更新するにはどうすればよいですか?

  4. 4

    Pythonの条件に基づいて、新しい列の列の値を返すにはどうすればよいですか?

  5. 5

    他の列の値と一致する行の値に基づいて新しい列を作成するにはどうすればよいですか?

  6. 6

    複数の列からの複数の条件に基づいて新しい列を作成するにはどうすればよいですか?

  7. 7

    他の列の条件に基づいてデータフレームに新しい列を作成するにはどうすればよいですか?

  8. 8

    Rを使用して、範囲内の数値に基づいて新しい列に値を割り当てるにはどうすればよいですか?

  9. 9

    条件に基づいてmatlabのテーブルに新しい値を追加するにはどうすればよいですか?

  10. 10

    mysqlに条件を追加して、列の値に基づいて異なるテーブルの値を取得するにはどうすればよいですか?

  11. 11

    マクロから作成された新しい値に基づいて列の値を更新するにはどうすればよいですか?

  12. 12

    別の配列の値に基づいて、配列内の各ActiveRecordに新しい属性を追加するにはどうすればよいですか?

  13. 13

    Pysparkのデータフレームの条件に基づいて新しいリスト値を設定するにはどうすればよいですか?

  14. 14

    pysparkのウィンドウ上の複数のwhen条件に基づいて新しい列を作成するにはどうすればよいですか?

  15. 15

    新しい列に基づいて各行を複製するにはどうすればよいですか?

  16. 16

    方程式と他の列の一意の値に基づいて新しい列を作成するにはどうすればよいですか?

  17. 17

    Rの既存の列の値に基づいて新しい列を作成するにはどうすればよいですか?

  18. 18

    Rの既存の列の値と名前に基づいて新しい列を作成するにはどうすればよいですか?

  19. 19

    複数の条件文に基づいて複数の新しい列を作成するにはどうすればよいですか?

  20. 20

    Rの複数の条件に基づいて新しい列を作成するにはどうすればよいですか?

  21. 21

    別の列の条件に基づいて列を転置するにはどうすればよいですか?

  22. 22

    別の列の数値に基づいて新しい列を作成するにはどうすればよいですか

  23. 23

    既存の列の値に基づいて新しい列を更新するにはどうすればよいですか?

  24. 24

    列の値に基づいて既存のデータフレームに新しい行を追加するにはどうすればよいですか?

  25. 25

    Rの行の値に基づいてdata.frameに新しい列を作成するにはどうすればよいですか?

  26. 26

    関数の戻り値に基づく値を使用してPythonで新しい列を設定するにはどうすればよいですか?

  27. 27

    以前の複数の値のパンダの状態に基づいて新しい列を計算するにはどうすればよいですか

  28. 28

    Rの行の値の組み合わせに基づいて新しい変数(列)を作成するにはどうすればよいですか?

  29. 29

    SQL Serverの他の列の値に基づいて新しい行を挿入するにはどうすればよいですか?

ホットタグ

アーカイブ