Python pandas:如果 A 列值出现多次,则分配 B 列的第一个值

我正在尝试将B 列的值i动态替换为一致的值,条件是A 列中j的值计数。


我正在尝试使用字典来映射值,但它不起作用。


color = ['black','mauve','teal','green','teal','black']

code = ['E45', 'M46', 'Y76', 'G44', 'T76','B43']


df = pd.DataFrame({'color': color, 'code': code})


# Dedupe a copy

df_copy = df

df_copy = df_copy.drop_duplicates(subset='color', keep='first')


# Create a dictionary

dummy_dict = df_copy[['color','code']].to_dict('list')

# {'color': ['black', 'mauve', 'teal', 'green', 'teal', 'black'], 'code': ['E45', 'M46', 'Y76', 'G44', 'T76', 'B43']}


### Not working

df["new_code"] = df.code.replace(dummy_dict)


### Output (wrong):

# color   code   new_code

# black    E45   E45

# mauve    M46   M46

# teal     Y76   Y76

# green    G44   G44

# teal     T76   T76

# black    B43   B43



### Desired output:

# color   code   new_code

# black    E45   E45

# mauve    M46   M46

# teal     Y76   Y76

# green    G44   G44

# teal     T76   Y76

# black    B43   E45

我哪里错了?就好像 Python 甚至没有访问我的字典来映射值。


长风秋雁
浏览 135回答 1
1回答

慕少森

它是transform和firstdf['new_code'] = df.groupby('color').code.transform('first')Out[21]:   color code new_code0  black  E45      E451  mauve  M46      M462   teal  Y76      Y763  green  G44      G444   teal  T76      Y765  black  B43      E45
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python