根据字典将列添加到数据框

Add columns to dataframe based on a dictionary

如果有这样的数据框:

df = pd.DataFrame({ 
'ID': ['1', '4', '4', '3', '3', '3'], 
'club': ['arts', 'math', 'theatre', 'poetry', 'dance', 'cricket']
})

我有一本名为 tag_dict:

的字典
{'1': {'Granted'},
 '3': {'Granted'}}

字典的键与数据框 ID 列中的某些 ID 匹配。 现在,我想在 Dataframe 中创建一个新列“Tag”,这样

输出应如下所示:

df = PD.DataFrame({ 
'ID': ['1', '4', '4', '3', '3', '3'], 
'club': ['arts', 'math', 'theatre', 'poetry', 'dance', 'cricket'],
'tag':['Granted','-','-','Granted','Granted','Granted']
})

我不确定 Granted 周围的大括号的用途是什么,但您可以使用 apply:

df = pd.DataFrame({ 
'ID': ['1', '4', '4', '3', '3', '3'], 
'club': ['arts', 'math', 'theatre', 'poetry', 'dance', 'cricket']
})

tag_dict = {'1': 'Granted',
 '3': 'Granted'}

df['tag'] = df['ID'].apply(lambda x: tag_dict.get(x, '-'))
print(df)

输出:

  ID     club      tag
0  1     arts  Granted
1  4     math        -
2  4  theatre        -
3  3   poetry  Granted
4  3    dance  Granted
5  3  cricket  Granted

.map的解决方案:

df["tag"] = df["ID"].map(dct).apply(lambda x: "-" if pd.isna(x) else [*x][0])
print(df)

打印:

  ID     club      tag
0  1     arts  Granted
1  4     math        -
2  4  theatre        -
3  3   poetry  Granted
4  3    dance  Granted
5  3  cricket  Granted
import pandas as pd
df = pd.DataFrame({ 
'ID': ['1', '4', '4', '3', '3', '3'], 
'club': ['arts', 'math', 'theatre', 'poetry', 'dance', 'cricket']})
        
# I've removed the {} around your items. Feel free to add more key:value pairs
my_dict = {'1': 'Granted', '3': 'Granted'}
        
# use .map() to match your keys to their values
df['Tag'] = df['ID'].map(my_dict)
        
# if required, fill in NaN values with '-'
nan_rows = df['Tag'].isna()
df.loc[nan_rows, 'Tag'] = '-'
df

最终结果: