パンダの別の列値に基づいて列ベースの特定の条件を計算する汎用関数を記述します

デンマーク語:

以下に示すように私はdfを持っています。

Date                t_factor     time_in_days
2020-02-01             5             1
2020-02-06             14            6
2020-02-09             23            9
2020-02-03             23            3       
2020-03-11             38            40         
2020-02-20             29            20               
2020-02-13             30            13           
2020-02-29             100           29           
2020-03-26             70            55 

それから、time_in_daysの値に基づいてt_functionという列を計算する関数を作成します。

t_functionの条件:

if T0 <= time_in_days <T1:
      t_function = (a1*time_in_days) + a0
else if T1 < time_in_days <= T2:
    t_function = 14
else:
    t_function = a2(time_in_days)**2 + (a1*time_in_days) + a0 

関数の入力は、データフレーム、time_in_days、T0、T1、T2、a0、a1、a2)です。

予想される出力:

if T0 =1 , T1=4, T2= 35, a0=3, a1=2, a2=1


Date                t_factor     time_in_days     t_function
2020-02-01             5             1            5
2020-02-06             14            6            14
2020-02-09             23            9            14
2020-02-03             23            3            9 
2020-03-11             38            40           1683           
2020-02-20             29            20           14     
2020-02-13             30            13           14  
2020-02-29             100           29           14
2020-03-26             70            55           3138

以下のコードを試しました

def t_function_df( df, time_in_days, T0, T1, T2, a0, a1, a2):
     df = df.copy()
     df['t_function'] = np.select( (df['time_in_days'].ge(T0) & df['time_in_days'].le(T1),
                             df['time_in_days'].gt(T1) & df['time_in_days'].le(T2)),
                            (df['time_in_days']*a1+a0, 14),   
                            (a2*df['time_in_days']**2) + df['time_in_days']*a1 + a0)

     return df[['Date', 'time_in_days', 't_function']]
cs95:

np.select ここで明白な解決策ですが、ここに疑似コードがあるので、なぜそれを実行しないのですか?

if T0 <= time_in_days < T1:
      t_function = (a1 * time_in_days) + a0
else if T1 < time_in_days <= T2:
    t_function = 14
else:
    t_function = (a2 * time_in_days) ** 2 + (a1 * time_in_days) + a0 

今になる、

T0 = 1; T1 = 4; T2 = 35; a0 = 3; a1 = 2; a2 = 1
condlist = ["@T0 <= time_in_days < @T1", "@T1 < time_in_days <= @T2"]
choicelist = ["(@a1 * time_in_days) + @a0", "14"]
default = "(@a2 * time_in_days) ** 2 + (@a1 * time_in_days) + @a0"

「@」記号は、メモリ内の実際の変数を検索するために使用されます。次のように、numpyとpandasの力を組み合わせることができます。

np.select(condlist=[df.eval(c) for c in condlist], 
          choicelist=[df.eval(q) for q in choicelist], 
          default=df.eval(default))  
# array([   5,   14,   14,    9, 1683,   14,   14,   14, 3138], dtype=int64)

df['t_function_actual'] = np.select(
              condlist=[df.eval(c) for c in condlist], 
              choicelist=[df.eval(q) for q in choicelist], 
              default=df.eval(default))  
df     
         Date  t_factor  time_in_days  t_function  t_function_actual
0  2020-02-01         5             1           5                  5
1  2020-02-06        14             6          14                 14
2  2020-02-09        23             9          14                 14
3  2020-02-03        23             3           9                  9
4  2020-03-11        38            40        1683               1683
5  2020-02-20        29            20          14                 14
6  2020-02-13        30            13          14                 14
7  2020-02-29       100            29          14                 14
8  2020-03-26        70            55        3138               3138

詳細についてevalは、こちらの投稿をご覧ください:pd.eval()を使用したパンダでの動的式評価

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

パンダは別の列の値に基づいてベースの値を適用します

分類Dev

パンダ:別の列の値に基づいて列を集計します

分類Dev

パンダ、別の列の値に基づいて値を減算します

分類Dev

複数の列にわたる特定の条件に基づいて最新性を計算する-パンダ

分類Dev

パンダ-別の列との相互参照に基づいて新しい値を計算します

分類Dev

パンダは、別の列に基づいて列の値に条件を適用します

分類Dev

別の列の値に基づいて、ある列の再帰を条件付きで計算します

分類Dev

別の列の値に基づいて、ある列の再帰を条件付きで計算します

分類Dev

Excelで、別の列の内容に基づいて列の合計を計算する数式を記述できますか?

分類Dev

パンダの複数の特定の条件に基づくforループを使用して複数の列を計算する

分類Dev

Pythonパンダを使用して、条件に基づいて行の値を別の列にコピーします

分類Dev

パンダ:別の列の内容に基づいて列を乗算します

分類Dev

条件付きの列の値に基づいて、連続するパンダの行の日付間の差を計算します

分類Dev

PHPの別の列値に基づいて列値を計算します

分類Dev

別の列の条件に基づいてパンダ列を作成します

分類Dev

パンダは他の列の値に基づいて新しい列を作成します/複数の列の関数を行ごとに適用します

分類Dev

特定の月の値に基づいて、別の列を条件としてパンダのデータフレームをフィルタリングします

分類Dev

特定の月の値に基づいて、別の列を条件としてパンダのデータフレームをフィルタリングします

分類Dev

パンダ:別の列の条件に基づいて、列の前のセル値を変更します

分類Dev

列名の条件に基づいてパンダデータフレームの列値を合計します

分類Dev

特定の基準に基づいてパンダの新しい列を計算する

分類Dev

特定の関数を適用して、データフレーム内の別の列の基準に基づいて列の値を置き換えます

分類Dev

パンダ:ローリング関数を適用して新しい列の値を計算します

分類Dev

パンダの別の列の値に基づいてgroupbyの後にラムダ関数を適用します

分類Dev

パンダでgroupbyを使用して、別の列の基準に基づいてパーセンテージ/比率の合計を計算する方法

分類Dev

パンダは、別の列の条件に基づいて列の値を選択的に上書きします

分類Dev

パンダ-現在および前の行の別の列の値に基づいて計算された値を持つ列を追加します

分類Dev

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

分類Dev

列の個別の値ごとに特定の条件を持つ行に基づいて、Pandasデータフレームのpercを計算します

Related 関連記事

  1. 1

    パンダは別の列の値に基づいてベースの値を適用します

  2. 2

    パンダ:別の列の値に基づいて列を集計します

  3. 3

    パンダ、別の列の値に基づいて値を減算します

  4. 4

    複数の列にわたる特定の条件に基づいて最新性を計算する-パンダ

  5. 5

    パンダ-別の列との相互参照に基づいて新しい値を計算します

  6. 6

    パンダは、別の列に基づいて列の値に条件を適用します

  7. 7

    別の列の値に基づいて、ある列の再帰を条件付きで計算します

  8. 8

    別の列の値に基づいて、ある列の再帰を条件付きで計算します

  9. 9

    Excelで、別の列の内容に基づいて列の合計を計算する数式を記述できますか?

  10. 10

    パンダの複数の特定の条件に基づくforループを使用して複数の列を計算する

  11. 11

    Pythonパンダを使用して、条件に基づいて行の値を別の列にコピーします

  12. 12

    パンダ:別の列の内容に基づいて列を乗算します

  13. 13

    条件付きの列の値に基づいて、連続するパンダの行の日付間の差を計算します

  14. 14

    PHPの別の列値に基づいて列値を計算します

  15. 15

    別の列の条件に基づいてパンダ列を作成します

  16. 16

    パンダは他の列の値に基づいて新しい列を作成します/複数の列の関数を行ごとに適用します

  17. 17

    特定の月の値に基づいて、別の列を条件としてパンダのデータフレームをフィルタリングします

  18. 18

    特定の月の値に基づいて、別の列を条件としてパンダのデータフレームをフィルタリングします

  19. 19

    パンダ:別の列の条件に基づいて、列の前のセル値を変更します

  20. 20

    列名の条件に基づいてパンダデータフレームの列値を合計します

  21. 21

    特定の基準に基づいてパンダの新しい列を計算する

  22. 22

    特定の関数を適用して、データフレーム内の別の列の基準に基づいて列の値を置き換えます

  23. 23

    パンダ:ローリング関数を適用して新しい列の値を計算します

  24. 24

    パンダの別の列の値に基づいてgroupbyの後にラムダ関数を適用します

  25. 25

    パンダでgroupbyを使用して、別の列の基準に基づいてパーセンテージ/比率の合計を計算する方法

  26. 26

    パンダは、別の列の条件に基づいて列の値を選択的に上書きします

  27. 27

    パンダ-現在および前の行の別の列の値に基づいて計算された値を持つ列を追加します

  28. 28

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

  29. 29

    列の個別の値ごとに特定の条件を持つ行に基づいて、Pandasデータフレームのpercを計算します

ホットタグ

アーカイブ