熊猫改变列值从字典



我有以下几个布尔值表:

df1 = pd.DataFrame(data={'a': [True, False, False], 
'b': [False, True, False]},
index=pd.Series([1, 2, 3], name='index'))
df2 = pd.DataFrame(data={'w': [True, False, False], 
'x': [False, True, False],
'y': [True, True, True],
'z': [True, False, True]},
index=pd.Series([1, 2, 3], name='index'))
<表类>指数btbody><<tr>1对假2假对3假假

如果您只有True/False,只需要将True更改为False,这个简单的屏蔽循环应该为您工作:

NB。我将字典dic称为dict, python内置用于构造字典

for k,v in dic.items():
df2[v] = df2[v].mask(df1[k], False)

输出:

w      x      y      z
index                            
1      False  False   True   True
2      False   True  False  False
3      False  False   True   True

我们可以将字典中的键值关联反向到renamedf2,以便列与df1中的名称对齐。然后,使用mask来更新值(按列对齐),使用set_axis来恢复列名:

# Avoiding using `dict` as a variable name
d = {'a': ['w', 'x'], 'b': ['y', 'z']}
df2 = (
df2.rename(columns={v: k for k, lst in d.items() for v in lst})
.mask(df1, False)
.set_axis(df2.columns, axis=1)
)

df2:

w      x      y      z
index                            
1      False  False   True   True
2      False   True  False  False
3      False  False   True   True

最新更新