Pandasデータフレーム-複数の条件計算に基づいて複数の列を作成します

user1412:

私はpythonを学んでいるので、私の質問が基本的すぎる場合は失礼します。実際には、さまざまな条件に基づいて、pandasデータフレームに複数の列を作成する必要があります。これはRでdata.tableを使用して行うことができます。R-からのサンプルデータをコードの下に貼り付けています

library(data.table)

cr=4
phi=1.85

colA <- sample(1.05:20.00,1000,replace=T)
colB <- sample(1.05:20.00,1000,replace=T)
colC  <- sample(1.05:20.00,1000,replace=T)
SALES <- sample(1.05:20.00,1000,replace=T)
colD <- sample(1.05:20.00,1000,replace=T)
VALUE <- sample(1.05:20.00,1000,replace=T)

df <- as.data.table(data.frame(colA,colB,colC,colD,SALES,VALUE))

df <- df[, c("colB_exp","colC_exp", "Unit_exp","Value_exp") 
         := list (ifelse(!is.na(colA),pmin(colB *  colA,(cr-1)*1/phi^2+cr*SALES * colA),0),
                  ifelse(!is.na(colA),pmin(colC * colA,(cr-1)*1/phi^2+cr*SALES * colD * colA),0),      
                  ifelse(!is.na(colA),SALES * colA,0),
                  ifelse(!is.na(colA),VALUE * colA,0)
         )]        

ご覧のとおり、この例では4つの列を作成する必要があります(実際には、作成する必要のあるさまざまな条件の列がさらに7つありますが、例として、4つだけを検討しています)

今私はPythonで同じことをしようとしていますが、これを行う方法を得ることができません。また、新しい列を作成するためのコーディングが多すぎるように思われるため、効率的に実行しているかどうかもわかりません。以下は、Pythonで試したサンプルデータとコードです。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.uniform(0,100,size=(100, 6)), columns=list(['colA','colB','colC','colD','SALES','VALUE']))

cr=4
phi=1.85

def colB_exp(row):
    return min(df['colB'] *  df['colA'],(cr-1)*1/phi^2+cr* df['SALES'] * df['colA'])


df['colB_exp'] = df.apply(lambda row:colB_exp(row) if df['colA'].notnull().all() else 0,axis = 1)

しかし、TypeErrorとしてエラーが発生します。dtyped[float64]配列および[bool]型のスカラーで 'rxor'を実行できません

私のdfのデータ型を確認すると、すべての列がfloat64であり、これが実際のメインデータの場合です。

どのような問題かわからないのですが、どうすれば修正できますか。

そして、すべての列条件に対して関数を作成する必要がありますか?これを行うより良い方法はありますか?

ありがとうございました !!

サヤンディップドゥッタ:

あなたが避ければそれはより速くなりますapply、あなたはこれを使ってこれを行うことができますnp.where

>>> df = pd.DataFrame(np.random.uniform(0,100,size=(100, 6)), 
                      columns=list(['colA','colB','colC','colD','SALES','VALUE']))

>>> cr=4
>>> phi=1.85
>>> df['colB_exp'] = np.where(
                              df['colA'].notnull(), 
                              pd.concat([
                                  df['colB'] *  df['colA'],
                                  (cr-1)*1/phi**2+cr* df['SALES'] * df['colA']
                                 ],axis=1).min(1), 0
                        )
>>> df

         colA       colB       colC  ...      SALES      VALUE     colB_exp
0   22.549300  64.278204  31.008298  ...  42.493048  59.603801  1449.428473
1   69.699479  69.173731  98.060696  ...  45.343364  40.046332  4821.373010
2   49.174025  81.000527  62.022084  ...  49.619752  18.370626  3983.121926
3   88.094696  33.193363  59.168448  ...  72.243254   8.378294  2924.159181
4   57.385150  14.326797  92.865076  ...  33.228036  55.651635   822.145427
..        ...        ...        ...  ...        ...        ...          ...
95  94.641142  39.684918  59.073406  ...  66.350751  38.040689  3755.825953
96   7.527524  10.376946  56.894015  ...   8.575608  71.710560    78.112711
97  12.258327  17.919200  97.053017  ...  22.476308  79.233166   219.659423
98  76.264761  60.973407  97.328900  ...  57.116251  29.756769  4650.122372
99  30.687590  77.486464   7.277809  ...  97.560641   4.835084  2377.872852

[100 rows x 7 columns]

さらに詳しく調べてdf.assign、一度に複数の列を追加できます。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

複数の条件に基づいてPandasデータフレーム列を作成します

分類Dev

Rの条件に基づいて、データフレームに複数の新しい列を追加します

分類Dev

pandasデータフレームの条件に基づいて、セルを複数の行に分割/分解します

分類Dev

複数の列の値に基づいて新しいデータフレーム列を作成します

分類Dev

Pandasデータフレームの複数の行に基づいて計算を実行する

分類Dev

列の複数の値に基づいてデータフレームに新しい行を作成します

分類Dev

別のデータフレームからの複数の列条件に基づいて列を作成する

分類Dev

列の値に基づいて複数のパンダデータフレームを作成します

分類Dev

pandas-複数の行の値に基づいて、合計された列データの行をデータフレームに追加します

分類Dev

Pandasの共通の列に基づいて、1つのデータフレームを複数のサブデータフレームに分割します

分類Dev

リストとデータフレームに基づいて複数の条件を持つデータフレームに新しい列を追加します

分類Dev

複数の列に基づいて、形状が異なる2つのデータフレーム間で複数の列を減算します

分類Dev

複数の条件に基づいてパンダデータフレームに新しい列を作成します

分類Dev

Pyspark:複数の条件に基づいてデータフレームをフィルタリングします

分類Dev

複数の条件に基づいて2つのデータフレームをマージします

分類Dev

元のデータフレームの列番号に基づいて複数のデータフレームを作成します

分類Dev

Pandas Dataframeの複数の列に基づいて数式を計算しますが、多くの中間列を作成することはありません

分類Dev

列の条件に基づいてPandasデータフレームを複数のデータフレームに分割する

分類Dev

複数の列と行の基準に基づいてRデータフレームを展開します

分類Dev

列名の複数の基準に基づいてデータフレーム列を抽出します

分類Dev

複数の条件に基づいてデータフレームの行を比較します

分類Dev

複数の行条件に基づいて2つの異なるデータフレームを比較します

分類Dev

複数の条件に基づいてPySparkデータフレームの行を削除します

分類Dev

dplyrデータフレームの単一の列に基づいて複数の列を変更します

分類Dev

データフレームに存在する列の数に基づいて複数の列をマージして作成します-パンダ

分類Dev

Rの複数の列に基づいて2つのデータフレームをマージします

分類Dev

特定の条件に基づいて、データフレームの1つの列のすべての行を複数の列に転置します

分類Dev

前の複数の行/列の値に基づいてデータフレームの行を削除します

分類Dev

複数の列としきい値に基づいてデータフレームをマージします

Related 関連記事

  1. 1

    複数の条件に基づいてPandasデータフレーム列を作成します

  2. 2

    Rの条件に基づいて、データフレームに複数の新しい列を追加します

  3. 3

    pandasデータフレームの条件に基づいて、セルを複数の行に分割/分解します

  4. 4

    複数の列の値に基づいて新しいデータフレーム列を作成します

  5. 5

    Pandasデータフレームの複数の行に基づいて計算を実行する

  6. 6

    列の複数の値に基づいてデータフレームに新しい行を作成します

  7. 7

    別のデータフレームからの複数の列条件に基づいて列を作成する

  8. 8

    列の値に基づいて複数のパンダデータフレームを作成します

  9. 9

    pandas-複数の行の値に基づいて、合計された列データの行をデータフレームに追加します

  10. 10

    Pandasの共通の列に基づいて、1つのデータフレームを複数のサブデータフレームに分割します

  11. 11

    リストとデータフレームに基づいて複数の条件を持つデータフレームに新しい列を追加します

  12. 12

    複数の列に基づいて、形状が異なる2つのデータフレーム間で複数の列を減算します

  13. 13

    複数の条件に基づいてパンダデータフレームに新しい列を作成します

  14. 14

    Pyspark:複数の条件に基づいてデータフレームをフィルタリングします

  15. 15

    複数の条件に基づいて2つのデータフレームをマージします

  16. 16

    元のデータフレームの列番号に基づいて複数のデータフレームを作成します

  17. 17

    Pandas Dataframeの複数の列に基づいて数式を計算しますが、多くの中間列を作成することはありません

  18. 18

    列の条件に基づいてPandasデータフレームを複数のデータフレームに分割する

  19. 19

    複数の列と行の基準に基づいてRデータフレームを展開します

  20. 20

    列名の複数の基準に基づいてデータフレーム列を抽出します

  21. 21

    複数の条件に基づいてデータフレームの行を比較します

  22. 22

    複数の行条件に基づいて2つの異なるデータフレームを比較します

  23. 23

    複数の条件に基づいてPySparkデータフレームの行を削除します

  24. 24

    dplyrデータフレームの単一の列に基づいて複数の列を変更します

  25. 25

    データフレームに存在する列の数に基づいて複数の列をマージして作成します-パンダ

  26. 26

    Rの複数の列に基づいて2つのデータフレームをマージします

  27. 27

    特定の条件に基づいて、データフレームの1つの列のすべての行を複数の列に転置します

  28. 28

    前の複数の行/列の値に基づいてデータフレームの行を削除します

  29. 29

    複数の列としきい値に基づいてデータフレームをマージします

ホットタグ

アーカイブ