使用字典修改dfs值

时间:2019-10-15 20:10:45

标签: python pandas dataframe

我有这样的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

如何使用字典生成所需的输出?

2 个答案:

答案 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