根据重复列中的条件填写缺失值

时间:2019-07-18 16:42:31

标签: python pandas replace missing-data

我有两列的Pandas数据框,例如:

df = ID state
      255 NJ
      255 NaN
      266 CT
      266 CT
      277 NaN
      277 NY
      277 NaN

我想填写state中的缺失值。

所需的输出如下:

df = ID state
      255 NJ
      255 NJ
      266 CT
      266 CT
      277 NY
      277 NY
      277 NY

我该如何克服?尝试但没有成功。尝试numpy.where创建遮罩,但遇到此错误operands could not be broadcast together with shapes (26229,) (2053,) ()等。任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:2)

IIUC,每个ID都有一个唯一的state,所以:

df['state'] = df.groupby('ID')['state'].transform('first')

输出:

    ID state
0  255    NJ
1  255    NJ
2  266    CT
3  266    CT
4  277    NY
5  277    NY
6  277    NY

答案 1 :(得分:1)

首先sort_values,然后使用groupby进行填充

df.sort_values(by=['ID','state'],ascending=[True,True],inplace=True)
df['state'] = df.groupby(['ID']).transform(pd.Series.ffill)

答案 2 :(得分:1)

groupbyffill + bfill一起使用

df.state=df.groupby('ID').state.apply(lambda x : x.ffill().bfill())
df
Out[907]: 
    ID state
0  255    NJ
1  255    NJ
2  266    CT
3  266    CT
4  277    NY
5  277    NY
6  277    NY

答案 3 :(得分:1)

DataFrame.sort_valuesGroupBy.ffill一起使用:

df['state'] = df.sort_values('state').groupby('ID')['state'].ffill()
print (df)
    ID state
0  255    NJ
1  255    NJ
2  266    CT
3  266    CT
4  277    NY
5  277    NY
6  277    NY

如果需要填充多列,请使用:

cols = ['state', ...]
df.loc[:, cols] = df.sort_values('state').groupby('ID')[cols].ffill()