用Pandas中的先前值填充多列内容的nan行

时间:2019-07-16 03:58:49

标签: python pandas

对于一个excel文件,用pandas读取后,我得到一个数据框,如下所示:

   type sub_type  num
0     a       a1    1
1   NaN      NaN    2
2   NaN       a2    3
3     b       b1    4
4   NaN      NaN    5
5   NaN       b2    6
6   NaN      NaN    7
7     c       c1    8
8   NaN      NaN    9
9   NaN      NaN   10
10  NaN       c2   11

如何获得这样的预期结果?谢谢。

   type sub_type  num
0     a       a1    1
1     a       a2    2
2     a       a2    3
3     b       b1    4
4     b       b2    5
5     b       b2    6
6     b       b3    7
7     c       c1    8
8     c       c2    9
9     c       c3   10
10    c       c2   11

2 个答案:

答案 0 :(得分:2)

您可以在固定列中使用fillna的正向填充:

df['ColumnNameORIndex'] = df['ColumnNameORIndex'].fillna(method='ffill')

或完整的dataFrame中:

df = df.fillna(method='ffill')

答案 1 :(得分:2)

是的,我们可以做到,但并不容易

df.type=df.type.ffill()# first ffill with type 
s=df.groupby([df.type,df.sub_type.notnull().cumsum()]).cumcount().add(df.sub_type.str[1:].astype(float).ffill(),fill_value=0).astype(int).astype(str).radd(df.type)
# then we create the sub group with the notnull value to find the sub id
# and get the number of values within each subgroup add the first value sub_id
df.sub_type.fillna(s,inplace=True)
df
   type sub_type  num
0     a       a1    1
1     a       a2    2
2     a       a2    3
3     b       b1    4
4     b       b2    5
5     b       b2    6
6     b       b3    7
7     c       c1    8
8     c       c2    9
9     c       c3   10
10    c       c2   11