在Python中填充特定的缺失值

在Python中填充特定的缺失值,python,pandas,scikit-learn,Python,Pandas,Scikit Learn,在我的数据集中,我有两列,分别是当前的工资和职位 职位名称: 这些值对应于当前工资列中的NAN值。通常我的数据大小为700.000 X 2 df2 = df[df.PREVAILING_WAGE.isnull()] df3 = df2.sort_values(by='JOB_TITLE',ascending=True) print(df3.JOB_TITLE) 我想填写这些职位的工资栏 我想找到每个职位的平均工资值,然后分配给空的职位 例如,计算机编程平均工资为90k,没有工资信息的计算机编程

在我的数据集中,我有两列,分别是当前的工资和职位

职位名称:

这些值对应于当前工资列中的NAN值。通常我的数据大小为700.000 X 2

df2 = df[df.PREVAILING_WAGE.isnull()]
df3 = df2.sort_values(by='JOB_TITLE',ascending=True)
print(df3.JOB_TITLE)
我想填写这些职位的工资栏

我想找到每个职位的平均工资值,然后分配给空的职位

例如,计算机编程平均工资为90k,没有工资信息的计算机编程可以实现90k

我在下面的链接上看到了一个类似的问题,但它不包含我想要的信息


首先,我用NaN创建一些随机数据,以便测试代码

job_title = '''ANALYST, BRAND DEVELOPMENT
ANESTHESIOLOGIST
ANESTHESIOLOGIST
BUSINESS INTELLIGENCE ANALYSTS
CIVIL ENGINEER
CIVIL ENGINEER
COMPUTER PROGRAMMER
COMPUTER PROGRAMMER ANALYST
COMPUTER SYSTEM ANALYST
COMPUTER SYSTEM ANALYST
COMPUTER SYSTEMS ANAGLYST
COMPUTER SYSTEMS ANALYST
CONSULTANT
CORPORATE COMMUNICATIONS SPECIALIST
COUNSELOR
DESIGN
ELEMENTARY CO-TEACHER
FASHION MODEL
FIELD ENGINEER
FINANCIAL ANALYST
FINANCIAL SENIOR ANALYST
FINANCIAL SPECIALIST'''.split('\n')

job_title = list(set(job_title))

# --- create random data with some NaN
import random

data = []

# rows with `NaN`
for _ in range(1):
    for item in job_title:
        data.append( (item, None))

# rows with random SALARY
for _ in range(2):    
    for item in job_title:
        data.append( (item, random.randint(10000,100000)))    

# put all in random order
random.shuffle(data)

import pandas as pd

df = pd.DataFrame(data, columns=['JOB_TITLE', 'SALARY'])
现在我有了带有随机数据的DataFrame和Nan,所以我可以创建解决方案

这一行为我提供了只查看具有NaN的行的过滤器-我将使用它查看工作前后的行

rows_with_na = df['SALARY'].isna()
我可以在上班前看到这些行

print('\n--- before ---\n')
print(df[ rows_with_na ])
我尝试了GroupByJob_TITLE,get mean,并在组中用fillna更新NaN,但这并没有改变原始df

但是使用组和fillna转换意味着我可以得到df的变化

现在我下班后可以看到这些行了

print('\n--- after ---\n')
print(df[ rows_with_na ])

你试了什么?你得到了什么结果?你找到每个职位的平均工资了吗?我会用group_by来做这件事。之后,您可以开始考虑如何替换值。也许你甚至可以在用group_by.Hi Furas创建的小组中这样做,上面列出的职位缺少薪水部分。我想填这些。取每个作业的其他数据的平均值,首先计算平均值。非常感谢。我的问题正是这样。
print('\n--- mean ---\n')

groups = df.groupby(['JOB_TITLE'])

for idx, grp in groups:
    mean = grp['SALARY'].mean()
    print('mean:', mean, idx)
    print(grp['SALARY'].fillna(mean)) # doesn't work as I expected
    print('---')
groups = df.groupby(['JOB_TITLE'])

#df['SALARY'] = groups.transform(lambda x: x.fillna(x.mean()))
#df['SALARY'] = groups.transform(lambda x: x.fillna(x.mean()))['SALARY']
df['SALARY'] = groups['SALARY'].transform(lambda x: x.fillna(x.mean()))
print('\n--- after ---\n')
print(df[ rows_with_na ])