更新数据框中的缺失值

时间:2020-09-04 11:47:32

标签: python pandas dataframe duplicates

我有一个df,例如:

    col1    col2    col3    col4
0   a       1       jake    
1   b       1       li
2   c       2       bob     corn
3   d       2       pat     
4   e       2       angie
5   f       1       jose    pepper
6   g       3       juan    

我必须做的是为col2重复并且在任何重复项中都存在col4的行更新col4的缺失值。

所以输出看起来像:

    col1    col2    col3    col4
0   a       1       jake    pepper 
1   b       1       li      pepper
2   c       2       bob     corn
3   d       2       pat     corn
4   e       2       angie   corn
5   f       1       jose    pepper
6   g       3       juan

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

我会用fillna做一个groupby().transform

df['col4'] = df['col4'].fillna(df.groupby('col2')['col4'].transform('first'))

输出:

  col1  col2   col3    col4
0    a     1   jake  pepper
1    b     1     li  pepper
2    c     2    bob    corn
3    d     2    pat    corn
4    e     2  angie    corn
5    f     1   jose  pepper
6    g     3   juan     NaN

答案 1 :(得分:0)

尝试一下

dic = df[df["col4"].notnull()].set_index("col2")["col4"].to_dict()
df.loc[df["col4"].isnull(), "col4"]=df["col2"]
df["col4"] = df["col4"].replace(dic)

O / P:

  col1  col2      col3    col4
0    a     1      jake  pepper
1    b     1        li  pepper
2    c     2       bob    corn
3    d     2       pat    corn
4    e     2     angie    corn
5    f     1      jose  pepper
6    g     3      juan       3

您可以通过找到3来删除str.isdigit()

答案 2 :(得分:0)

可以这样实现:

dictionary = df[~(df.col4=='')].set_index("col2")["col4"].to_dict()
df.col4 = df.col2.apply(lambda x : dictionary[x] if x in dictionary.keys() else '')

输出:

| col1   |   col2 | col3   | col4   |
|:-------|-------:|:-------|:-------|
| a      |      1 | jake   | pepper |
| b      |      1 | li     | pepper |
| c      |      2 | bob    | corn   |
| d      |      2 | pat    | corn   |
| e      |      2 | angie  | corn   |
| f      |      1 | jose   | pepper |
| g      |      3 | juan   |        |