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】:是transform
和first
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列的第一个值的主要内容,如果未能解决你的问题,请参考以下文章
如果列值不为 NULL,则 Python pandas 应用函数
Pandas:仅当某个列值在过去 N 个月内出现 N 次时才保留行