Как заменить определенные строки значениями общего столбца в пандах DataFrame? - PullRequest
0 голосов
/ 05 декабря 2018

Допустим, у меня есть следующие панды 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   #

Итак, в DataFrame есть нечетные строки для Bob, а именно строки 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.

Как заменить любую строку в Age на # на правильное целое число, указанное в других строках на основе Name?Если существует #, проверьте другие строки с тем же значением Name и замените #.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

попробуйте это,

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 голосов
/ 05 декабря 2018

Вы хотите использовать действительные значения, чтобы заполнить недействительные?В этом случае используйте map:

v = df.assign(Age=pd.to_numeric(df['Age'], errors='coerce')).dropna()
df['Age'] = df['Name'].map(v.set_index('Name').Age)  

df
     Name   Age
0    Alex  10.0
1     Bob  12.0
2  Clarke  13.0
3     Bob  12.0
4     Bob  12.0
5     Bob  12.0
6  Clarke  13.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...