1. ホーム
  2. パイソン

[解決済み】Pandasでシリーズ/データフレームのカラムを条件付きで作成する。

2022-03-24 20:19:09

質問

以下のようなデータフレームがあります。

    Type       Set
1    A          Z
2    B          Z           
3    B          X
4    C          Y

データフレームと同じ長さ(同じ数のレコード/行)の、色を設定する別の列をデータフレームに追加したい(または系列を生成する)。 'green' もし Set == 'Z''red' もし Set は他の何かと等しい。

どうすればいいのでしょうか?

どのように解決するのですか?

選択肢が2つしかない場合。

df['color'] = np.where(df['Set']=='Z', 'green', 'red')

例えば

import pandas as pd
import numpy as np

df = pd.DataFrame({'Type':list('ABBC'), 'Set':list('ZZXY')})
df['color'] = np.where(df['Set']=='Z', 'green', 'red')
print(df)

イールド

  Set Type  color
0   Z    A  green
1   Z    B  green
2   X    B    red
3   Y    C    red


条件が2つ以上ある場合は np.select . たとえば、次のような場合です。 color になります。

  • yellow いつ (df['Set'] == 'Z') & (df['Type'] == 'A')
  • それ以外の場合 blue いつ (df['Set'] == 'Z') & (df['Type'] == 'B')
  • それ以外の場合 purple いつ (df['Type'] == 'B')
  • それ以外の場合 black ,

であれば

df = pd.DataFrame({'Type':list('ABBC'), 'Set':list('ZZXY')})
conditions = [
    (df['Set'] == 'Z') & (df['Type'] == 'A'),
    (df['Set'] == 'Z') & (df['Type'] == 'B'),
    (df['Type'] == 'B')]
choices = ['yellow', 'blue', 'purple']
df['color'] = np.select(conditions, choices, default='black')
print(df)

となり、その結果

  Set Type   color
0   Z    A  yellow
1   Z    B    blue
2   X    B  purple
3   Y    C   black