我想按ID号填充“Col”中的na值。我已经尝试过groupby
df=pd.DataFrame({
'ID':[1,2,1,2,1,2],
'Col':['One','NaN','NaN','Two','NaN','NaN']
})
以下是预期输出:
df=pd.DataFrame({
'ID':[1,2,1,2,1,2],
'Col':['One','Two','One','Two','One','Two']
})
我知道这是一个简单的例子,但我希望您能给予我任何帮助。此外,我有一个100万行的 Dataframe ,所以任何时间效率将不胜感激
我尝试过的:
x=df_total[df_total['id'].astype(str)=='2']
buck_map = dict(x[~x['buckets'].isnull()][['id','buckets']].values)
x['buckets']=x['id'].map(buck_map)
3条答案
按热度按时间knsnq2tg1#
您可以创建将ID值Map到填充值的字典:
然后使用字典将NaN值替换为fill值:
b91juud32#
您的问题比较含糊,因为有几种方法可以根据您的示例生成所需的输出。
假设您正在查找每个
ID
的“多数值”,并且NaN
是要删除的实际float('NaN')
,而不仅仅是字符串'NaN'
,那么下面的语句将非常有效:注意:要确保
'NaN'
是nan而不是字符串,请先执行以下操作:s3fp2yjn3#
不清楚您真正想要的是什么,以及是否只是转换和替换,还是需要groupby。假设您指的是列的字符串,并且您只想要替换,则需要一种将1转换为'One'的方法(最好使用字典),然后将其应用于每行。您可以用途:
其给出: