我有我的字典
d = {'A':1, 'B':2, 'C':3}
和我的数据框
df =pd.DataFrame({
"col1": ["A", "B", "C"],
"col2": [1, 2, 3],
"col3": [2, 1, 4] })
我搜索将df中的每个值与字典中的对应值进行比较。如果匹配,则保留该值,否则该值将被丢弃。
我尝试
m = df['col2'] >= d[df['col1']]
df.where(m, df, other = "")
但是它得到了m的错误代码:TypeError:'Series'对象是可变的,因此不能被散列...
谢谢您的帮助。
答案 0 :(得分:1)
使用Apply创建一个新列进行比较
df[‘dict_col’] = df[‘col1’].apply(lambda k: d[k])
m = df[‘dict_col’] >= df[‘col2’]
df[‘col2’] = df[‘col2’].where(m, df, other = "")
答案 1 :(得分:1)
您可以将pd.Series.map
与loc
和布尔索引一起使用:
df = df.loc[df['col2'] >= df['col1'].map(d)]
答案 2 :(得分:1)