根据另一个 pandas 中的值自动填充列

Auto fill column based off values in another pandas

我正在尝试根据另一列中的值填充一个单独的列。对于下面的 df 我想在 ['Code'] == 'A''C2' when ['Code'] == 'B' 时用 'C1' 填充 ['Assign']。我喜欢用 np.nan

填充的所有其他内容

导入 pandas 作为 pd

d = ({
    'Place' : ['Home','Away','Work','Home','Shops','Park','Cafe','Shops','Away','Home','Cafe','Work','Park'],  
    'Code' : ['A','A','A','A','C','B','B','C','A','A','B','A','B'],            
     })

df = pd.DataFrame(data=d)

我试过了,但值不正确。

df['Assign'] = df['Code'].where((df['Code'] == 'A'), ['C1'])
df['Assign'] = df['Code'].where((df['Code'] == 'B'), ['C2'])

我希望输出这个:

    Place Code Assign
0    Home    A     C1
1    Away    A     C1
2    Work    A     C1
3    Home    A     C1
4   Shops    C     
5    Park    B     C2
6    Cafe    B     C2
7   Shops    C     
8    Away    A     C1
9    Home    A     C1
10   Cafe    B     C2
11   Work    A     C1
12   Park    B     C2

您可以使用 np.where:

import numpy as np
df['Assign'] = np.where(df['Code']=='A','C1','C2')

根据问题的最新变化,解决方案是:

df['Assign'] = np.where(df['Code']=='A','C1',np.where(df['Code']=='B','C2',''))

如果当 df['Code']=='C' 使用时需要空值:

df['Assign'] = np.where(df['Code']=='A','C1',np.where(df['Code']=='B','C2',None))

None 是字符串的空值。

map 与字典 get 方法和默认值一起使用

m = lambda x: dict(A='C1', B='C2').get(x, '')
df.assign(Assign=df.Code.map(m))

    Place Code Assign
0    Home    A     C1
1    Away    A     C1
2    Work    A     C1
3    Home    A     C1
4   Shops    C       
5    Park    B     C2
6    Cafe    B     C2
7   Shops    C       
8    Away    A     C1
9    Home    A     C1
10   Cafe    B     C2
11   Work    A     C1
12   Park    B     C2

fillna

m = dict(A='C1', B='C2')
df.assign(Assign=df.Code.map(m).fillna(''))