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

seb835

これが私がやろうとしていることです:

Dataframe before: 
       name         value    apply_f
0      SEBASTIEN    9        false
1      JOHN         4        false
2      JENNY        np.inf   true

Apply function f: len(df['name']) to columns 'value' only if columns 'apply_f' == True 

Dataframe after: 
       name       value    apply_f
0      SEBASTIEN  9        False
1      JOHN       4        False
2      JENNY      5        True

これが私が現在持っているものです:

from pandas import *
from numpy import *

df = DataFrame( { "name":  ['SEBASTIEN', 'JOHN', 'JENNY'] , 
                  "value": [9, 4, np.inf] , 
                  "apply_f":  [False,False,True]} )

def f(x):
    return len(x)

df['value'] = df[df['apply_f'] == True]['name'].apply(f)

しかし、結果は私が期待していたものではありません:

    apply_f    name         value
0   False      SEBASTIEN    NaN
1   False      JOHN         NaN
2    True      JENNY        5

列は初期値をNaNに置き換えます

EdChum

上書きする理由は、左側のインデックスがデフォルトでデータフレーム全体に設定されているためです。左側にもマスクを適用するとloc、条件が満たされた行にのみ影響します。

In [272]:

df.loc[df['apply_f'] == True, 'value'] = df[df['apply_f'] == True]['name'].apply(lambda row: f(row))
df
Out[272]:
  apply_f       name  value
0   False  SEBASTIEN      9
1   False       JOHN      4
2    True      JENNY      5

上記での使用はloc、同じブールマスクセマンティクスを使用したとすると、これが機能する場合と機能しない場合があり、最新のパンダバージョンでエラーが発生するためです。

In[274]:
df[df['apply_f'] == True]['value'] = df[df['apply_f'] == True]['name'].apply(lambda row: f(row))
df
-c:8: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
Out[274]:
  apply_f       name     value
0   False  SEBASTIEN  9.000000
1   False       JOHN  4.000000
2    True      JENNY       inf

あなたがしていることについては、numpyを使用する方が簡潔で読みやすいでしょうwhere

In [279]:

df['value'] = np.where(df['apply_f']==True, len(df['name']), df['value'])
df
Out[279]:
  apply_f       name  value
0   False  SEBASTIEN      9
1   False       JOHN      4
2    True      JENNY      3

あなたの例は問題を示すことであると理解していますがwhere、特定の状況でも使用できます

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

適用関数を使用して、データフレームの月に基づく値をrの別の列の値に置き換えます

分類Dev

同じデータフレーム内の別の列の値に基づいて、データフレーム列の値を置き換える

分類Dev

同じデータフレーム内の別の列の値に基づいてデータフレーム内の値を置き換える方法は?

分類Dev

別の列の値に基づいてデータフレームの値を置き換える方法

分類Dev

データフレーム内の位置に基づいて文字列を数値に置き換える方法は?

分類Dev

別の列に基づいてデータフレーム列の値を置き換える

分類Dev

別のデータフレームの一致するIDに基づいてデータフレーム列の値を置き換えます

分類Dev

条件に基づいて、データフレームの特定の値を別のデータフレームの値に置き換えます

分類Dev

パンダデータフレーム:別の列の値に基づいて複数の行を置き換えます

分類Dev

条件に基づいてデータフレームの列の複数の値を置き換える

分類Dev

別のデータフレームのインデックスに基づいてすべての列の値を置き換えます

分類Dev

別の列の条件に基づいて、リストをデータフレーム内の別のリストに置き換えます

分類Dev

別のデータフレームに基づいて、データフレームの列から複数の値を置き換える

分類Dev

条件に基づいてデータフレーム列の値を置き換えます

分類Dev

pandasデータフレームに基づいてnumpy2D配列の値を置き換えます

分類Dev

Rの別のデータフレームに基づいて1つの列の値を置き換えます

分類Dev

別の列の値に基づいて、新しいデータフレーム列に関数を適用する

分類Dev

別のデータフレームのPythonパンダに基づいて列の値を置き換えます-より良い方法?

分類Dev

他の列の値に基づいて、列のデータフレーム行のサブセットに関数を適用します

分類Dev

1つの列の値に基づいて、データフレーム全体のnull値を置き換える

分類Dev

pandasデータフレームの別の列の状態に基づいて、int64値を「None」に置き換えます

分類Dev

データフレームの他の列の基準を使用して、ベクトル内の重複する値を置き換えます

分類Dev

他の列に基づいてデータフレームの列値を置き換える

分類Dev

同じ行の他の列の値に基づいてデータフレーム列要素に関数を適用しますか?

分類Dev

パンダ:他のデータフレームの列に基づいて、1つのデータフレームの特定の列内の値を置き換えます

分類Dev

条件に基づいてパンダデータフレームに新しい列を追加し、異なる列のNan値を置き換えます

分類Dev

パンダ:条件に基づいて、データフレームの値を別のデータフレームの値に置き換えます

分類Dev

正規表現の一致に基づいてデータフレーム内の文字列値を置き換えます

分類Dev

Pythonの1つの基準に基づいて、文字列のデータフレーム内の数値を抽出します

Related 関連記事

  1. 1

    適用関数を使用して、データフレームの月に基づく値をrの別の列の値に置き換えます

  2. 2

    同じデータフレーム内の別の列の値に基づいて、データフレーム列の値を置き換える

  3. 3

    同じデータフレーム内の別の列の値に基づいてデータフレーム内の値を置き換える方法は?

  4. 4

    別の列の値に基づいてデータフレームの値を置き換える方法

  5. 5

    データフレーム内の位置に基づいて文字列を数値に置き換える方法は?

  6. 6

    別の列に基づいてデータフレーム列の値を置き換える

  7. 7

    別のデータフレームの一致するIDに基づいてデータフレーム列の値を置き換えます

  8. 8

    条件に基づいて、データフレームの特定の値を別のデータフレームの値に置き換えます

  9. 9

    パンダデータフレーム:別の列の値に基づいて複数の行を置き換えます

  10. 10

    条件に基づいてデータフレームの列の複数の値を置き換える

  11. 11

    別のデータフレームのインデックスに基づいてすべての列の値を置き換えます

  12. 12

    別の列の条件に基づいて、リストをデータフレーム内の別のリストに置き換えます

  13. 13

    別のデータフレームに基づいて、データフレームの列から複数の値を置き換える

  14. 14

    条件に基づいてデータフレーム列の値を置き換えます

  15. 15

    pandasデータフレームに基づいてnumpy2D配列の値を置き換えます

  16. 16

    Rの別のデータフレームに基づいて1つの列の値を置き換えます

  17. 17

    別の列の値に基づいて、新しいデータフレーム列に関数を適用する

  18. 18

    別のデータフレームのPythonパンダに基づいて列の値を置き換えます-より良い方法?

  19. 19

    他の列の値に基づいて、列のデータフレーム行のサブセットに関数を適用します

  20. 20

    1つの列の値に基づいて、データフレーム全体のnull値を置き換える

  21. 21

    pandasデータフレームの別の列の状態に基づいて、int64値を「None」に置き換えます

  22. 22

    データフレームの他の列の基準を使用して、ベクトル内の重複する値を置き換えます

  23. 23

    他の列に基づいてデータフレームの列値を置き換える

  24. 24

    同じ行の他の列の値に基づいてデータフレーム列要素に関数を適用しますか?

  25. 25

    パンダ:他のデータフレームの列に基づいて、1つのデータフレームの特定の列内の値を置き換えます

  26. 26

    条件に基づいてパンダデータフレームに新しい列を追加し、異なる列のNan値を置き換えます

  27. 27

    パンダ:条件に基づいて、データフレームの値を別のデータフレームの値に置き換えます

  28. 28

    正規表現の一致に基づいてデータフレーム内の文字列値を置き換えます

  29. 29

    Pythonの1つの基準に基づいて、文字列のデータフレーム内の数値を抽出します

ホットタグ

アーカイブ