如何映射条件行?

时间:2019-06-13 12:10:41

标签: python-3.x dataframe dictionary

我想基于df2填充df1。 方法之一是先使用合并,然后使用fillna,但我认为这不是一个好方法。

另一个是使用字典来处理它。

例如

df1=pd.DataFrame({'A':['Feb',np.nan,'Air','Flow','Feb',
                            'Beta','Cat','Feb','Beta','Air'],
                       'B':['s','s','t','s','t','s','t','t','t','t'],
                       'C':[5,4,3,2,1,7,6,5,4,3],
                       'D':[4,np.nan,3,np.nan,2,
                            np.nan,2,3,np.nan,7]})

df2=pd.DataFrame({'A':['Feb','Blue',np.nan,'Flow','Feb',
                            'Beta','Cat','Feb','Beta','Air'],
                       'B':[np.nan,np.nan,'value','s','t','s','t','t','t','t'],
                       'C':[np.nan,np.nan,3,2,1,7,6,5,4,3]}
                       )

df3=df1.drop_duplicates(subset=['A'])

dd=df3.set_index('A')['B'].to_dict()

df2

      A      B    C
0   Feb    NaN  NaN
1  Blue    NaN  NaN
2   NaN  value  3.0
3  Flow      s  2.0
4   Feb      t  1.0
5  Beta      s  7.0
6   Cat      t  6.0
7   Feb      t  5.0
8  Beta      t  4.0
9   Air      t  3.0

如果df ['B']中的数据为NaN,我想用dd填充df2 ['B']。

如果我使用

df2['B']= df2['A'].map(dd)

然后用dd填充df2 ['B']中的所有数据。

      A    B    C
0   Feb    s  NaN
1  Blue  NaN  NaN
2   NaN    s  3.0
3  Flow    s  2.0
4   Feb    s  1.0
5  Beta    s  7.0
6   Cat    t  6.0
7   Feb    s  5.0
8  Beta    s  4.0
9   Air    t  3.0

我想得到的是

      A    B    C
0   Feb    s  NaN
1  Blue  NaN  NaN
2   NaN value  3.0
3  Flow    s  2.0
4   Feb    s  1.0
5  Beta    s  7.0
6   Cat    t  6.0
7   Feb    s  5.0
8  Beta    s  4.0
9   Air    t  3.0

0 个答案:

没有答案