首页 > 解决方案 > 根据其他列回填

问题描述

df=pd.DataFrame({"Date":[date(2019,10,1),date(2019,10,2),date(2019,10,1),date(2019,10,2),date(2019,10,1),date(2019,10,2),date(2019,10,1),date(2019,10,2)],
                "CatID":[1,1,1,None,2,2,2,2],
                 "ShopID":[1,1,1,1,2,2,2,2]
                })

df.CatID=df['CatID'].bfill()
df

对于 中的 None 值CatID,我希望根据ShopID. 该None值由 2 填充,这不是我想要的(因为值CatID来自ShopID=2),它应该保持为None,我该怎么办?

标签: pythonpython-3.xpandas

解决方案


我不确定您到底想达到什么目标:

import pandas as pd
from datetime import date


df=pd.DataFrame({"Date":[date(2019,10,1),date(2019,10,2),date(2019,10,1),date(2019,10,2),date(2019,10,1),date(2019,10,2),date(2019,10,1),date(2019,10,2)],
                "CatID":[1,1,1,None,2,2,2,2],
                 "ShopID":[1,1,1,1,2,2,2,2]
                })

df['CatID_copy'] = df['CatID']
df['CatID'] = df['CatID'].bfill()
df.loc[df['CatID_copy'].isna(), 'CatID'] = df['CatID_copy'] 
df.drop(columns='CatID_copy', inplace=True)

输出:

   Date         CatID  ShopID
0  2019-10-01    1.0       1
1  2019-10-02    1.0       1
2  2019-10-01    1.0       1
3  2019-10-02    NaN       1
4  2019-10-01    2.0       2
5  2019-10-02    2.0       2
6  2019-10-01    2.0       2
7  2019-10-02    2.0       2

如果有不同,请附上预期的输出。


推荐阅读