我有这样的df:
xx yy zz
A 6 5 2
B 4 4 5
B 5 6 7
C 6 6 6
C 7 7 7
然后我有一本字典,里面有一些键(对应于df的索引名称)和值(列名称):
{'A':['xx'],'B':['yy','zz'],'C':['xx','zz']}
我想使用字典来检查那些不在dict值中出现的列名是否设置为零以生成此输出:
xx yy zz
A 6 0 0
B 0 4 5
B 0 6 7
C 6 0 6
C 7 0 7
如何使用字典生成所需的输出?
答案 0 :(得分:3)
您可以使用索引
mask = (pd.DataFrame(d.values(), index=d.keys())
.stack()
.reset_index(level=1, drop=True)
.str.get_dummies()
.groupby(level=0).sum()
.astype(bool)
)
df[mask].fillna(0)
xx yy zz
A 6.0 0.0 0.0
B 0.0 4.0 5.0
B 0.0 6.0 7.0
C 6.0 0.0 6.0
C 7.0 0.0 7.0
答案 1 :(得分:2)
我会做什么
s=pd.Series(d).explode()
s=pd.crosstab(s.index,s)
df.update(s.mask(s==1))
df
xx yy zz
A 6.0 0.0 0.0
B 0.0 4.0 5.0
B 0.0 6.0 7.0
C 6.0 0.0 6.0
C 7.0 0.0 7.0