Python 熊猫:根据字典中的值保留列值,并将其他列设为空白

Python 熊猫:根据字典中的值保留列值,并将其他列设为空白,python,python-3.x,pandas,python-2.7,dataframe,Python,Python 3.x,Pandas,Python 2.7,Dataframe,我有一个数据帧 df = pd.DataFrame([["A","X",98,56,1,2,3,4], ["B","Z",79,54,36,3,4,8], ["C","Y",98,56,2,5,6,7],["A","Y",79,54,36,12,13,24], ["B","X",98,56,3,6,

我有一个数据帧

df = pd.DataFrame([["A","X",98,56,1,2,3,4], ["B","Z",79,54,36,3,4,8], ["C","Y",98,56,2,5,6,7],["A","Y",79,54,36,12,13,24], ["B","X",98,56,3,6,7,8], ["C","Z",48,51,85,5,6,5]], columns=["id","key","c1","c2","c3","c4","C5","C6"])
我有一本字典

dic = {"X":['c1','c3'],"Y":['c2','c4'],"Z":['c5','c6']}
根据df的键列,使用dictionary dic选择列,仅在这些列中保留行值,并将其他行值设置为空

例如:对于df的键X,将C1和C3中的值保留为字典中的值,并将其他列留空

预期输出:

df_out = pd.DataFrame([["A","X",98,"",1,"","",""], ["B","Z","","","","",4,8], ["C","Y","",56,"",5,"",""],["A","Y","",54,"",12,"",""], ["B","X",98,"",3,"","",""], ["C","Z","","","","",6,5]], columns=["id","key","c1","c2","c3","c4","C5","C6"])
如何操作?

用于不匹配的列,并在以下字段中设置空字符串:


非常好的解决方案+一个非常好的问题+1.
dic = {"X":['c1','c3'],"Y":['c2','c4'],"Z":['C5','C6']}

for k, v in dic.items():
    df.loc[df.key == k, df.columns.difference(v + ['id', 'key'])] = ''

print (df)
  id key  c1  c2 c3  c4 C5 C6
0  A   X  98      1          
1  B   Z                 4  8
2  C   Y      56      5      
3  A   Y      54     12      
4  B   X  98      3          
5  C   Z                 6  5