【问题标题】:Python pandas: if column A value appears more than once, assign first value of column BPython pandas:如果A列值出现不止一次,则分配B列的第一个值
【发布时间】:2020-11-20 17:16:17
【问题描述】:

我正在尝试将 B 列 的值 i 动态替换为以 j 的值计数为条件的一致值>A 栏

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

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 甚至没有访问我的字典来映射值。

【问题讨论】:

    标签: python pandas dictionary conditional-statements mapping


    【解决方案1】:

    transformfirst

    df['new_code'] = df.groupby('color').code.transform('first')
    
    Out[21]:
       color code new_code
    0  black  E45      E45
    1  mauve  M46      M46
    2   teal  Y76      Y76
    3  green  G44      G44
    4   teal  T76      Y76
    5  black  B43      E45
    

    【讨论】:

    • 这是一个比我刚刚发布的更优雅的答案 - 我会立即接受它。谢谢安迪。
    • @LindsayVeazey:不客气。很高兴我能帮忙:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多