我有一个包含许多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只有一个水果描述。
处理此案的最佳方法是什么?
答案 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)