根据另一个 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(''))
我正在尝试根据另一列中的值填充一个单独的列。对于下面的 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(''))