我尝试在单个Pandas数据框列上应用Lambda函数来编码数据并合并多个值

but5z9lq  于 2023-03-28  发布在  其他
关注(0)|答案(2)|浏览(105)

我有一些数据,我正在做特征工程。我试图编码分类特征,但没有成功。它只给了我一个值,vs 2。我看不出我的代码有什么问题,并在Pandas中尝试了许多不同的方法。
我尝试将LotShape特征转换为2个值,方法是将'IR 1'、'IR 2'和'IR 3'组合为一个值2,而'Reg'为1。但是,所有内容都返回为2。有人能看出我做错了什么吗?谢谢!

def irreg(df):
if 'IR1' or 'IR2' or 'IR3' in df['LotShape']:
return 2
else:
return 1

df['LotShape_encoded']=list(map(lambda x: irreg(df['LotShape']),df['LotShape']))
df.LotShape_encoded.value_counts()

2 1460
Name: LotShape_encoded, dtype: int64

原始值_counts是这样的:

Reg 925
IR1 484
IR2 41
IR3 10
Name: LotShape, dtype: int64

我甚至尝试了这个功能,但它不喜欢它:

def irreg(df):
    for i in df['LotShape']:
        if df['LotShape'] =='IR1' or df['LotShape'] =='IR2' or df['LotShape'] =='IR3':
            i=2
        else:
            i=1
    return df['LotShape']

df['LotShape_encoded'] = df.assign(lambda x: irreg(df['LotShape']))

它给了我
TypeError:DataFrame.assign()接受1个位置参数,但给出了2个
我现在很迷茫,不知道我错过了什么,谢谢!

pprl5pva

pprl5pva1#

您可以简单地使用numpy.where(或numpy.select,如果您有两个以上的值):

df['LotShape_encoded'] = np.where(df['LotShape'].isin(['IR1', 'IR2', 'IR3']), 2, 1)

如果你不需要,不要使用lambda函数。这里有一个函数,它接受Series作为参数(而不是你的变量名所暗示的DataFrame)。在你的函数中,如果你的Series包含'IRE1'或'IRE2'或'IRE3',你将返回2。除非你只有'Reg'值,否则函数将始终返回2:

def irreg(sr):  # Series not a DataFrame
    mask = sr.isin(['IR1', 'IR2', 'IR3'])
    return np.where(mask, 2, 1)

df['LotShape_encoded'] = irreg(df['LotShape'])

另一点:只有当你想动态创建一个新的列并链接到另一个pandas方法时才使用assign,否则不要使用它。

更新

示例:

df = pd.DataFrame({'LotShape': ['IR1', 'IR2', 'IR3', 'Reg']})
df['LotShape_encoded'] = np.where(df['LotShape'].isin(['IR1', 'IR2', 'IR3'], 2, 1)
print(df)

# Output
  LotShape  LotShape_encoded
0      IR1                 2
1      IR2                 2
2      IR3                 2
3      Reg                 1
xoshrz7s

xoshrz7s2#

我刚想出来。谢谢。

def irreg(df):
    if df['LotShape'] =='IR1' or df['LotShape'] =='IR2' or df['LotShape'] =='IR3':
        return 2
    else:
        return 1
    
df['LotShape_encoded'] = df.apply(lambda df:irreg(df), axis=1)
df.LotShape_encoded.value_counts()

相关问题