如何用pandas DataFrame中的共享列值替换某些行?[英] How to replace certain rows by shared column values in pandas DataFrame?

本文是小编为大家收集整理的关于如何用pandas DataFrame中的共享列值替换某些行?的处理方法,想解了如何用pandas DataFrame中的共享列值替换某些行?的问题怎么解决?如何用pandas DataFrame中的共享列值替换某些行?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

假设我有以下 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   #

因此,Bob 的 DataFrame 中有奇数行,即第 3、4 和 5 行.这些值始终是 #,而不是 12.第 1 行表明 Bob 应该是 12,而不是 #.

在这个例子中,用 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

但是,这不适用于较大的数据帧,例如

     Name Age
0    Alex  10
1     Bob  12
2  Clarke  13
3     Bob   #
4     Bob   #
5     Bob   #
6  Clarke   #

第 6 行应该是 6 Clarke 13.

如何根据 Name 将 Age 中的任何行替换为 # 与其他行中给出的正确整数?如果 # 存在,则检查具有相同名称值的其他行并替换 #.

推荐答案

试试这个,

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

本文地址:https://www.itbaoku.cn/post/1728054.html