熊猫:如何动态填充NaN?

时间:2019-03-19 16:21:29

标签: python pandas

我有一个包含许多NaN值的数据集,我想根据其他列的值来填充它。这是一个例子。

  Ind Init Desc
   1   A   Apple
   2   A   Apple
   3   A   NaN
   4   B   NaN
   5   B   Banana
   6   B   Banana
   7   C   Cherry
   8   C   NaN
   9   C   Cherry
   10  D   NaN
   11  D   NaN
   12  D   NaN
   13  A   NaN
   14  A   NaN
   15  A   Apple

我不能仅仅使用df.fillna('apple'),因为它必须是动态的。我也不能同时使用(method='ffill')(method='bfill'),因为在A的情况下,它应该是ffill,在B的情况下,它应该是bfill。同样在D的情况下,应该说“没有可用的水果描述!”

您可能会假设没有缺失的Init,并且每个唯一的Init只有一个水果描述。

处理此案的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

您可以使用类似的内容:

df['Desc1']=(df.groupby('Init')['Desc'].apply
         (lambda x: x.ffill().bfill()).fillna('No fruit description available!'))
print(df)

    Ind Init    Desc                            Desc1
0     1    A   Apple                            Apple
1     2    A   Apple                            Apple
2     3    A     NaN                            Apple
3     4    B     NaN                           Banana
4     5    B  Banana                           Banana
5     6    B  Banana                           Banana
6     7    C  Cherry                           Cherry
7     8    C     NaN                           Cherry
8     9    C  Cherry                           Cherry
9    10    D     NaN  No fruit description available!
10   11    D     NaN  No fruit description available!
11   12    D     NaN  No fruit description available!
12   13    A     NaN                            Apple
13   14    A     NaN                            Apple
14   15    A   Apple                            Apple

答案 1 :(得分:1)

像这样吗?

mapping_dict = {'A': 'Apple', 'B': 'Banana', 'C':'Cherry', 'D':'no fruit description available'}
df['Desc'] = df['Init'].map(mapping_dict)