Python 有没有更好的方法用方法';菲利';和熊猫在一起?

Python 有没有更好的方法用方法';菲利';和熊猫在一起?,python,pandas,fillna,Python,Pandas,Fillna,让我解释一下这种情况。问题是我目前正在处理的数据有时是分类的,有时不是。所以我决定用带有“ffil”的菲尔娜熊猫作为方法。我只是觉得这不是最佳和/或更清洁的解决方案。如果有人能帮我找到更好的办法,我将不胜感激。这里有一些代码来说明这一点: 数据={ “详情”:[“苹果mac”、“苹果iphone x”、“三星galaxy s10”、“三星galaxy s10”、“hp电脑”], “类别”:[“计算机”、“电话”、“电话”、np.NaN、np.NaN] } df=pd.DataFrame(数据)

让我解释一下这种情况。问题是我目前正在处理的数据有时是分类的,有时不是。所以我决定用带有“ffil”的菲尔娜熊猫作为方法。我只是觉得这不是最佳和/或更清洁的解决方案。如果有人能帮我找到更好的办法,我将不胜感激。这里有一些代码来说明这一点:

数据={
“详情”:[“苹果mac”、“苹果iphone x”、“三星galaxy s10”、“三星galaxy s10”、“hp电脑”],
“类别”:[“计算机”、“电话”、“电话”、np.NaN、np.NaN]
}
df=pd.DataFrame(数据)
返回

详细分类
0苹果mac电脑
1部苹果iphone x手机
2 samsumg galaxy s10手机
3 samsumg星系s10 NaN
4台hp电脑
首先,我过滤了没有类别的细节值:

details\u不带\u cats=df[df.category.isnull()]detail.unique()
然后我循环这些值以填充对应项:

对于细节中的wc-in-details\u,不带猫:
df[df.detail==detail\u wc]=df[df.detail==detail\u wc].fillna(方法='ffill')
打印(df)
返回的正是我想要的

    detail              category
0   apple mac           computer
1   apple iphone x      phone
2   samsumg galaxy s10  phone
3   samsumg galaxy s10  phone
4   hp computer         NaN
困境如下。如果我有数千或数百万样本的情况会发生什么。有更好的办法吗?请帮助

我们能做什么

df['category']=df.groupby('detail')['category'].ffill()
df
               detail  category
0           apple mac  computer
1      apple iphone x     phone
2  samsumg galaxy s10     phone
3  samsumg galaxy s10     phone
4         hp computer       NaN

如果要创建具有值的项目目录以供以后使用,可以执行以下操作:

maps = df.dropna().set_index('detail').to_dict()['category']
df['category'] = df.set_index('detail').index.map(maps)
地图

输出:

               detail  category
0           apple mac  computer
1      apple iphone x     phone
2  samsumg galaxy s10     phone
3  samsumg galaxy s10     phone
4         hp computer       NaN

谢谢你的回答。如果我们只打印
df.groupby('detail')['category'].ffill()
我们没有详细信息作为索引,但是如果我们打印
df.groupby('detail')['category'].count()
我们有,为什么?只是好奇而已。
               detail  category
0           apple mac  computer
1      apple iphone x     phone
2  samsumg galaxy s10     phone
3  samsumg galaxy s10     phone
4         hp computer       NaN