Skip to main content
 首页 » 编程设计

python之基于键值关系在 pandas 中创建一个新列

2025年05月04日20mengfanrong

我有一个包含如下系列的数据框:

0    CollgCr 
1    Veenker 
2    CollgCr 
3    Crawfor 
4    NoRidge 
5    Mitchel 
6    Somerst 
7     NWAmes 
8    OldTown 
9    BrkSide 

基于该系列,我想通过对它们进行分组来创建一个新的专栏(功能)。

例如,如果数据是 CollgCr 或 Veenker,那么新列中的值将是“Middle”

我尝试使用下面的代码

df_full['NeighborGrp'] = "Upper" 
df_full['NeighborGrp'].loc[df_full["Neighborhood"] == "CollgCr"] = "Middle" 
df_full['NeighborGrp'].loc[df_full["Neighborhood"] == ["Mitchel", "OldTown", "BrkSide", "Sawyer", "NAmes", "IDOTRR", 
                                                          "MeadowV", "Edwards", "NPkVill", "BrDale", "SWISU", "Blueste"]] = "Lower" 

第一行和第二行运行良好,但第三行返回错误“ValueError: Arrays were different lengths”

padas 中是否有任何特殊语法允许我像这样基于多值条件创建新列?

谢谢

请您参考如下方法:

使用np.select和 pd.Series.isin

m = ['CollgCr', 'Veenker'] 
l = ["Mitchel", "OldTown", "BrkSide", "Sawyer", "NAmes", "IDOTRR","MeadowV", "Edwards", "NPkVill", "BrDale", "SWISU", "Blueste"] 
 
df['new_col'] = np.select([df.city.isin(l), df.city.isin(m)], ['lower', 'middle'], default='upper') 
 
 
    city    new_col 
0   CollgCr middle 
1   Veenker middle 
2   CollgCr middle 
3   Crawfor upper 
4   NoRidge upper 
5   Mitchel lower 
6   Somerst upper 
7   NWAmes  upper 
8   OldTown lower 
9   BrkSide lower