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

Posted

技术标签:

【中文标题】Python pandas:如果A列值出现不止一次,则分配B列的第一个值【英文标题】:Python pandas: if column A value appears more than once, assign first value of column 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 甚至没有访问我的字典来映射值。

【问题讨论】:

【参考方案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:不客气。很高兴我能帮忙:)

以上是关于Python pandas:如果A列值出现不止一次,则分配B列的第一个值的主要内容,如果未能解决你的问题,请参考以下文章

Python - Pandas:基于列值的 IF 语句

如果列值不为 NULL,则 Python pandas 应用函数

Pandas:仅当某个列值在过去 N 个月内出现 N 次时才保留行

根据另一个数据框 python pandas 替换列值 - 更好的方法?

Python/Pandas - 按列值删除重复行

如果列值在一定范围内彼此接近,则删除 pandas 行