Skip to main content
 首页 » 编程设计

python之使用 isin/transform/merge/groupby/map 的组合来有条件地填充数据框列

2024年08月15日41xxx_UU

考虑几个选项以了解哪个选项最适合以下场景:

我在 Pandas 中有一个数据框,看起来像

CODE NAME COL1 COL2 COL3 
IN   INDIA  x    x    z 
US   USA    r    s    s 
IND  INDIA  f   d     d 
RU   RUSSIA g    f    d 
USA  USA    d    s    s 
IN   INDIA  d    d    a 

我想创建一个新列,比如 POSSIBLE_CODES,这样它就是对应的 NAME 列已经看到的所有代码的列表。 所以我的目标 df 应该是这样的:

CODE NAME COL1 COL2 COL3 POSSIBLE_CODES 
IN   INDIA  x    x    z  [IN, IND] 
US   USA    r    s    s  [US, USA] 
IND  INDIA  f   d     d  [IN, IND] 
RU   RUSSIA g    f    d  [RU] 
USA  USA    d    s    s  [US, USA] 
IN   INDIA  d    d    a  [IN, IND] 

请您参考如下方法:

您可以创建一个新系列,其中索引是您的 NAME 列,您的值是每个 NAME 可能的 CODE:

s = df.groupby('NAME').CODE.unique().rename('POSSIBLE') 

现在使用 pd.Series.map:

df.assign(POSSIBLE=df.NAME.map(s)) 

  CODE    NAME COL1 COL2 COL3   POSSIBLE 
0   IN   INDIA    x    x    z  [IN, IND] 
1   US     USA    r    s    s  [US, USA] 
2  IND   INDIA    f    d    d  [IN, IND] 
3   RU  RUSSIA    g    f    d       [RU] 
4  USA     USA    d    s    s  [US, USA] 
5   IN   INDIA    d    d    a  [IN, IND]