我有两个数据帧:
df_components
:唯一组件的列表(ID,描述)dataset
:CSV中的几行和几列(其中一列包含组件的描述)。你知道吗我需要在dataset
中根据df_components
用组件的ID创建一个新列。你知道吗
我试着这样做:
基于索引创建df_components
和ID
列
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 1
。是df_components
上的项数。你知道吗
如何使用在df_components
上找到的项的ID创建这个新列?你知道吗
你的逻辑似乎太复杂了。由于您当前正在从
dataset
创建^{df_components
,因此更好的方法是将Categorical Data与dataset
一起使用。这意味着您不需要创建df_components
。你知道吗步骤1
将
dataset['COMPDESC']
转换为范畴。你知道吗步骤2
从分类代码创建ID。由于类别默认按字母顺序排序,索引从0开始,因此在代码中添加1。你知道吗
如果愿意,可以将整个分类映射提取到字典:
请记住,如果您希望您的id从1开始,那么总是有一个1偏移量。此外,每次“DESCRIPTION”更改时,都需要显式更新“ID”。你知道吗
使用分类数据的优势
相关问题 更多 >
编程相关推荐