为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUH函数 2021-07-22 17:12:31
我有一个具有以下结构的数据框:    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在此先感谢您的帮助!
查看完整描述

2 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

使用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 char

0   101  Carl  19.0   ts

1   101   NaN   NaN   tt

2   101  Carl  19.0   tt

3   102   NaN   NaN   ts

4   102   NaN   NaN   tt

5   102   NaN   NaN   tt

6   103   Aoi  23.0   ts

7   103   Aoi  23.0   tt

8   103   NaN   NaN   tt


查看完整回答
反对 回复 2021-07-28
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

在一行中:


result = df.copy()


result.update(df.groupby(['code']).bfill()[df['char']=='ts'])


result


    code  name   age char

0  101.0  Carl  19.0   ts

1  101.0   NaN   NaN   tt

2  101.0  Carl  19.0   tt

3  102.0   NaN   NaN   ts

4  102.0   NaN   NaN   tt

5  102.0   NaN   NaN   tt

6  103.0   Aoi  23.0   ts

7  103.0   Aoi  23.0   tt

8  103.0   NaN   NaN   tt

解释


通过执行以下操作,数据框填充了'char' == 'ts' 已填充代码的任何可用值的行:


df.groupby(['code']).bfill()

   code  name   age char

0   101  Carl  19.0   ts

1   101  Carl  19.0   tt

2   101  Carl  19.0   tt

3   102   NaN   NaN   ts

4   102   NaN   NaN   tt

5   102   NaN   NaN   tt

6   103   Aoi  23.0   ts

7   103   Aoi  23.0   tt

8   103   NaN   NaN   tt



df.groupby(['code']).bfill()[df['char']=='ts']


   code  name   age char

0   101  Carl  19.0   ts

3   102   NaN   NaN   ts

6   103   Aoi  23.0   ts


查看完整回答
反对 回复 2021-07-28
  • 2 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号