有条件地将某些行值复制到其他行

我有一个具有以下结构的数据框:


    code name age char

    101  NaN  NaN  ts

    101  NaN  NaN  tt

    101  Carl 19   tt

    102  NaN  NaN  ts

    102  NaN  NaN  tt

    102  NaN  NaN  tt

    103  NaN  NaN  ts

    103  Aoi  23   tt

    103  NaN  NaN  tt

我想将值从列“名称”和“年龄”复制到其他行,条件是它们存在,具有相同的“代码”和“字符”是“ts”。我想要的结果数据框如下:


    code name age char

    101  Carl 19   ts

    101  NaN  NaN  tt

    101  Carl 19   tt

    102  NaN  NaN  ts

    102  NaN  NaN  tt

    102  NaN  NaN  tt

    103  Aoi  23   ts

    103  Aoi  23   tt

    103  NaN  NaN  tt

在此先感谢您的帮助!


HUH函数
浏览 162回答 2
2回答

繁华开满天机

使用GroupBy.apply具有前进和后退填充缺失值和布尔面膜则设定值:cols = ['name','age']df1 = df.groupby(['code'])[cols].apply(lambda x: x.ffill().bfill())mask = df['char'] == 'ts'df.loc[mask, cols] = df1.loc[mask, cols]print (df)   code  name   age char0   101  Carl  19.0   ts1   101   NaN   NaN   tt2   101  Carl  19.0   tt3   102   NaN   NaN   ts4   102   NaN   NaN   tt5   102   NaN   NaN   tt6   103   Aoi  23.0   ts7   103   Aoi  23.0   tt8   103   NaN   NaN   tt

斯蒂芬大帝

在一行中:result = df.copy()result.update(df.groupby(['code']).bfill()[df['char']=='ts'])result    code  name   age char0  101.0  Carl  19.0   ts1  101.0   NaN   NaN   tt2  101.0  Carl  19.0   tt3  102.0   NaN   NaN   ts4  102.0   NaN   NaN   tt5  102.0   NaN   NaN   tt6  103.0   Aoi  23.0   ts7  103.0   Aoi  23.0   tt8  103.0   NaN   NaN   tt解释通过执行以下操作,数据框填充了'char' == 'ts' 已填充代码的任何可用值的行:df.groupby(['code']).bfill()   code  name   age char0   101  Carl  19.0   ts1   101  Carl  19.0   tt2   101  Carl  19.0   tt3   102   NaN   NaN   ts4   102   NaN   NaN   tt5   102   NaN   NaN   tt6   103   Aoi  23.0   ts7   103   Aoi  23.0   tt8   103   NaN   NaN   ttdf.groupby(['code']).bfill()[df['char']=='ts']   code  name   age char0   101  Carl  19.0   ts3   102   NaN   NaN   ts6   103   Aoi  23.0   ts
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python