gpt4 book ai didi

python - 使用在另一个 DataFrame 中找到的值创建一个新列

转载 作者:太空宇宙 更新时间:2023-11-04 02:27:17 25 4
gpt4 key购买 nike

我有两个数据框:

  • df_components:唯一组件列表(ID、DESCRIPTION)
  • 数据集:来自 CSV 的多行和多列(其中一列包含组件的描述)。

我需要根据 df_components 使用组件 ID 在 dataset 中创建一个新列。

我试过这样做:

根据索引创建df_componentsID

components = dataset["COMPDESC"].unique()
df_components = pd.DataFrame(components, columns=['DESCRIPTION'])
df_components.sort_values(by='DESCRIPTION', ascending=True, inplace=True)
df_components.reset_index(drop=True, inplace=True)
df_components.index += 1
df_components['ID'] = df_components.index

示例输出:

                                           DESCRIPTION   ID
1 AIR BAGS 1
2 AIR BAGS:FRONTAL 2
3 AIR BAGS:FRONTAL:SENSOR/CONTROL MODULE 3
4 AIR BAGS:SIDE/WINDOW 4

数据集中创建COMP_ID:

def create_component_id_column(row):
found = df_components[df_components['DESCRIPTION'] == row['COMPDESC']]
return found.ID if len(found.index) > 0 else None

dataset['COMP_ID'] = dataset.apply(lambda row: create_component_id_column(row), axis=1)

然而,这给了我错误 ValueError: Wrong number of items passed 248, placement implies 1df_components 上的项目数为 248。

如何使用在 df_components 上找到的项目的 ID 创建这个新列?

最佳答案

您的逻辑似乎过于复杂。由于您当前正在创建df_components 来自dataset,更好的主意是使用Categorical Data数据集。这意味着您不需要创建 df_components

第一步

dataset['COMPDESC'] 转换为分类。

dataset['COMPDESC'] = dataset['COMPDESC'].astype('category')

第 2 步

从分类代码创建 ID。由于类别默认按字母顺序排序,索引从 0 开始,因此在代码中加 1。

dataset['ID'] = dataset['COMPDESC'].cat.codes + 1

如果您愿意,可以将整个分类映射提取到字典中:

cat_map = dict(enumerate(dataset['COMPDESC'].cat.categories))

请记住,如果您希望您的 ID 从 1 开始,则始终有一个偏移量为 1。此外,每次“DESCRIPTION”更改时,您都需要明确更新“ID”。

使用分类数据的优势

  • 内存高效:字符串只存储一次。
  • 结构:您定义类别并具有自动数据验证层。
  • 一致:由于类别到代码的映射始终是一对一的,因此它们将始终保持一致,即使添加了新类别也是如此。

关于python - 使用在另一个 DataFrame 中找到的值创建一个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50081500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com