如何通过dict内部的dict映射df

问题描述

iam tryin通过检查我的字典中是否有一个col的值来更改特定行上的值。

这是我的数据

  if (Input::hasFile('logo')) {
                $file = Input::file('logo');
                $ext = $file->getClientOriginalExtension();
                $file_name = 'company-logo-' . time() . ".{$ext}";
                $path = base_path().'/public/';
                $file->move($path,$file_name);
            }

我的字典是

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":["B","A","C","B","E"],"number":["one","two","one","two"]}
df=pd.DataFrame.from_dict(data)

那是我尝试的

my_dict={"F":{"col1":2,"col2":44,"col3":0},"B":{"col1":0,"col2":11,"col3":4,"col4":50,"col5":np.nan}}

但是我进入每个单元格列表而不是一个

我喜欢得到这个

my_dict={"F":{"col1":2,"B": 
{"col1":0,"col5":np.nan}}
col_list=df.columns[:-2]
m = df["type"].isin(my_dict)
df.loc[m,col_list] = df.loc[m,col_list].apply(lambda d: 
pd.Series.map(df["type"],my_dict))
df

解决方法

我们可以尝试update

updatedf=pd.DataFrame(my_dict).T.reindex(df.type)
updatedf.index=df.index
df.update(updatedf)
df
Out[21]: 
   col1  col2  col3  col4  col5 type number
0   0.0  11.0   4.0  50.0     0    B    one
1   3.0   2.0   6.0  11.0     5    A    two
2   4.0   4.0   0.0  22.0     7    C    two
3   5.0   6.0  11.0   8.0     3    A    one
4   0.0  11.0   4.0  50.0     8    B    one
5   2.0   1.0   6.0   NaN     2    A    two
6   6.0   5.0   7.0   9.0     9    E    two