dataframe如何替换某列元素值,如何用Pandas DataFrame中的共享列值替换某些行?

Let's say I have the following pandas DataFrame:

import pandas as pd

data = [['Alex',10],['Bob',12],['Clarke',13], ['Bob', '#'], ['Bob', '#'], ['Bob', '#']]

df = pd.DataFrame(data,columns=['Name','Age'], dtype=float)

print(df)

Name Age

0 Alex 10

1 Bob 12

2 Clarke 13

3 Bob #

4 Bob #

5 Bob #

So, there are odd rows in the DataFrame for Bob, namely rows 3, 4, and 5. These values are consistently #, not 12. Row 1 shows that Bob should be 12, not #.

In this example, it's straightforward to fix this with replace():

df = df.replace("#", 12)

print(df)

Name Age

0 Alex 10

1 Bob 12

2 Clarke 13

3 Bob 12

4 Bob 12

5 Bob 12

However, this wouldn't work for larger dataframes, e.g.

Name Age

0 Alex 10

1 Bob 12

2 Clarke 13

3 Bob #

4 Bob #

5 Bob #

6 Clarke #

whereby row 6 should be 6 Clarke 13.

How does one replace any row in Age with # with the correct integer as given in other rows, based on Name? If # exists, check other rows with the same Name value and replace #.

解决方案

try this,

d= df[df['Age']!='#'].set_index('Name')['Age']

df['Age']=df['Name'].replace(d)

O/P:

Name Age

0 Alex 10

1 Bob 12

2 Clarke 13

3 Bob 12

4 Bob 12

5 Bob 12

6 Clarke 13

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值