如何用dict \ df用一个col上的条件替换列列表

问题描述

我想按条件使用dict \ df更改列列表中的值 我有df \ dict了

类似这样的东西

list_of_cols=["col1",.."col5"]
df[list_of_cols]=where[df["A"]==dict],dict

这是数据

data={"col1":[np.nan,3,4,5,9,2,6],"col2":[4,6,1,5],"col3":[7,11,7],"col4":[14,22,8,np.nan,9],"col5":[0,7,"type":["A","A","C","B","E"],"number":["one","two","one","two"]}
df=pd.DataFrame.from_dict(data)
df

这是我的dict \ df,我想将df [“ type”]与dict映射 因此,如果type == A,col1-col5将为0

my_dict={"A":0,"B":21,"C":14,"D":9}
my_dict=pd.DataFrame.from_dict(my_dict,orient='index')
my_dict

我喜欢得到的东西

data={"col1":[0,14,21,"col2":[0,"col3":[0,"col4":[0,0.9],"two"]}
df=pd.DataFrame.from_dict(data)
df

解决方法

IIUC,使用isin过滤类型,然后使用applymap直接分配:

m = df["type"].isin(my_dict)

df.loc[m,"col1":"col5"] = df.loc[m,"col1":"col5"].apply(lambda d: pd.Series.map(df["type"],my_dict))

print (df)

   col1  col2  col3  col4  col5 type number
0   0.0   0.0   0.0   0.0   0.0    A    one
1   0.0   0.0   0.0   0.0   0.0    A    two
2  14.0  14.0  14.0  14.0  14.0    C    two
3   0.0   0.0   0.0   0.0   0.0    A    one
4  21.0  21.0  21.0  21.0  21.0    B    one
5   0.0   0.0   0.0   0.0   0.0    A    two
6   6.0   5.0   7.0   9.0   9.0    E    two