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

根据另一列的条件填充空值(pandas)

根据另一列的条件填充空值(pandas)

偶然的你 2024-01-04 17:18:27
我正在尝试在数据集中填充空值。描述栏有公寓类型。对于工作室,我尝试填写为 0 间卧室,而对于房间,我尝试填写为 1 间卧室。我试过df.loc[df['Description'] == 'Studio', 'Bedrooms'] = df['Bedrooms'].fillna(0)df.loc[df['Description'] == 'Rooms', 'Bedrooms'] = df['Bedrooms'].fillna(1)但它不起作用。有没有人有什么建议?
查看完整描述

1 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

没有示例 DataFrame 我不得不询问你到底想要什么,希望我是对的。


您可以使用简单的 lambda 函数:


 # Import pandas, numpy

    import pandas as pd

    import numpy as np    


# Sample df

    d = {'Desc': ['Studio', 'Rooms', 'Studio', 'Studio', 'Studio', 'Rooms','Rooms','Rooms','Studio', 'Rooms']}

    df = pd.DataFrame(data=d)

    df['Rooms'] = np.nan


 # Lambda function       

    df['Rooms'] = df.apply(

            lambda row: 0 if row['Desc'] == 'Studio' else 1,

            axis=1

        )

或者使用 list + for 循环并将新列添加到您的 df.


# Import pandas, numpy

import pandas as pd

import numpy as np


# Sample df

d = {'Desc': ['Studio', 'Rooms', 'Studio', 'Studio', 'Studio', 'Rooms','Rooms','Rooms','Studio', 'Rooms']}

df = pd.DataFrame(data=d)


# Create empty list for bedroom numbers.

bedrooms = []


# Fill the list with 0/1 base on your Studio/Rooms option.

for i in range(0,len(df.index)):

    if df['Desc'].loc[i].lower() == 'studio':

        bedrooms.append(0)

    else:

        bedrooms.append(1)


# Add new column to your DataFrame

df['Rooms'] = np.array(bedrooms)

两种方式都会在名为“房间”的新列中显示结果 (0/1)。


如果我没有正确猜测您的问题,请告诉我。


祝你好运!


查看完整回答
反对 回复 2024-01-04
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信