[解決済み] pandas が他の列の値に基づいて新しい列を作成する / 複数の列の関数を行単位で適用する
質問
カスタム関数(if-else ラダーを使用)をこれらの6つのカラムに適用したい (
ERI_Hispanic
,
ERI_AmerInd_AKNatv
,
ERI_Asian
,
ERI_Black_Afr.Amer
,
ERI_HI_PacIsl
,
ERI_White
) を、データフレームの各行で使用することができます。
他の質問でいろいろな方法を試してみましたが、やはり私の問題に対する正しい答えが見つからないようです。 この問題で重要なのは、もしその人がヒスパニックとしてカウントされているならば、他のものとしてカウントされることはないということです。 他の民族の欄に "1" があったとしても、2つ以上の人種ではなく、ヒスパニックとしてカウントされるのです。 同様に、すべてのERI列の合計が1より大きい場合、彼らは2つ以上の人種としてカウントされ、固有の民族(ヒスパニックを除く)としてカウントされることはありません。 これでご理解いただけると思います。 どんな助けでも大いに感謝します。
各行でforループを行い、各レコードが基準を満たした場合、1つのリストに追加され、元のリストからは除外されるようなものです。
以下のデータフレームから、SQLで以下の仕様に基づいた新しいカラムを計算する必要があります。
========================= CRITERIA ===============================
IF [ERI_Hispanic] = 1 THEN RETURN “Hispanic”
ELSE IF SUM([ERI_AmerInd_AKNatv] + [ERI_Asian] + [ERI_Black_Afr.Amer] + [ERI_HI_PacIsl] + [ERI_White]) > 1 THEN RETURN “Two or More”
ELSE IF [ERI_AmerInd_AKNatv] = 1 THEN RETURN “A/I AK Native”
ELSE IF [ERI_Asian] = 1 THEN RETURN “Asian”
ELSE IF [ERI_Black_Afr.Amer] = 1 THEN RETURN “Black/AA”
ELSE IF [ERI_HI_PacIsl] = 1 THEN RETURN “Haw/Pac Isl.”
ELSE IF [ERI_White] = 1 THEN RETURN “White”
コメント ヒスパニックのERIフラグが真(1)の場合、その従業員は "ヒスパニック "として分類される。
コメント 非ヒスパニック系のERIフラグが1つ以上真である場合、"Two or More "を返す。
データフレーム ======================================================================================================================== 12
lname fname rno_cd eri_afr_amer eri_asian eri_hawaiian eri_hispanic eri_nat_amer eri_white rno_defined
0 MOST JEFF E 0 0 0 0 0 1 White
1 CRUISE TOM E 0 0 0 1 0 0 White
2 DEPP JOHNNY 0 0 0 0 0 1 Unknown
3 DICAP LEO 0 0 0 0 0 1 Unknown
4 BRANDO MARLON E 0 0 0 0 0 0 White
5 HANKS TOM 0 0 0 0 0 1 Unknown
6 DENIRO ROBERT E 0 1 0 0 0 1 White
7 PACINO AL E 0 0 0 0 0 1 White
8 WILLIAMS ROBIN E 0 0 1 0 0 0 White
9 EASTWOOD CLINT E 0 0 0 0 0 1 White
解決方法は?
まず、あなたが望む翻訳を行う関数を書くことです。あなたの疑似コードに基づいて例をまとめてみました。
def label_race (row):
if row['eri_hispanic'] == 1 :
return 'Hispanic'
if row['eri_afr_amer'] + row['eri_asian'] + row['eri_hawaiian'] + row['eri_nat_amer'] + row['eri_white'] > 1 :
return 'Two Or More'
if row['eri_nat_amer'] == 1 :
return 'A/I AK Native'
if row['eri_asian'] == 1:
return 'Asian'
if row['eri_afr_amer'] == 1:
return 'Black/AA'
if row['eri_hawaiian'] == 1:
return 'Haw/Pac Isl.'
if row['eri_white'] == 1:
return 'White'
return 'Other'
関数に渡すパラメータはSeriesオブジェクトで、quot;row"とラベル付けされていることに注意してください。
次に、pandasのapply関数を使って、関数を適用します。
df.apply (lambda row: label_race(row), axis=1)
axis=1指定に注意してください。これは、アプリケーションが列レベルではなく、行レベルで行われることを意味します。その結果がこちらです。
0 White
1 Hispanic
2 White
3 White
4 Other
5 White
6 Two Or More
7 White
8 Haw/Pac Isl.
9 White
この結果でよければ、もう一度実行し、結果を元のデータフレームの新しいカラムに保存します。
df['race_label'] = df.apply (lambda row: label_race(row), axis=1)
結果のデータフレームは次のようになります(新しい列を見るには右にスクロールしてください)。
lname fname rno_cd eri_afr_amer eri_asian eri_hawaiian eri_hispanic eri_nat_amer eri_white rno_defined race_label
0 MOST JEFF E 0 0 0 0 0 1 White White
1 CRUISE TOM E 0 0 0 1 0 0 White Hispanic
2 DEPP JOHNNY NaN 0 0 0 0 0 1 Unknown White
3 DICAP LEO NaN 0 0 0 0 0 1 Unknown White
4 BRANDO MARLON E 0 0 0 0 0 0 White Other
5 HANKS TOM NaN 0 0 0 0 0 1 Unknown White
6 DENIRO ROBERT E 0 1 0 0 0 1 White Two Or More
7 PACINO AL E 0 0 0 0 0 1 White White
8 WILLIAMS ROBIN E 0 0 1 0 0 0 White Haw/Pac Isl.
9 EASTWOOD CLINT E 0 0 0 0 0 1 White White
関連
-
Python入門 openを使ったファイルの読み書きの方法
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。
-
[解決済み] pandas apply()から複数カラムを返す
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] PandasでDataFrameの行を列の値に基づいて削除する
-
[解決済み] pandas dataframe のカラムまたは行からリストを取得しますか?
-
[解決済み】pandasの関数をカラムに適用して、複数の新しいカラムを作成する?
-
[解決済み】複数の引数を持つ関数を適用して、新しいpandasカラムを作成する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python string splicing.join()とsplitting.split()の説明
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
Python LeNetネットワークの説明とpytorchでの実装
-
Python Pillow Image.save jpg画像圧縮問題
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】NameError: 名前 'self' が定義されていません。
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み] 既存のDataFrameに新しい列を追加する方法は?