python,用pandas合并2个dataframe问题
有2个表,第一个表叫【商品】,里面含有商品的信息,示例内容如下:商品名称
康师傅方便面
统一方便面
飘柔洗发水
第二个表叫【商品分类】,里面含有商品的简称和分类信息,示例内容如下:
简称 大类 子类
方便面 食品饮料 方便食品
洗发 个人护理 洗发水
查【商品】表里的【商品名称】中,是否包含【商品分类】表里的【简称】,如果包含,就将大类和子类合并过去,示例内容如下。
商品名称 简称 大类 子类
康师傅方便面 方便面 食品饮料 方便食品
统一方便面 方便面 食品饮料 方便食品
飘柔洗发水 洗发 个人护理 洗发水
请问各位老师,怎么实现呢?
for 简称in 简称list:
if 简称 in 商品名称list:
大类子类合并
import pandas as pd
'''商品表'''
commodities = pd.DataFrame({'商品名称':['康师傅方便面', '统一方便面', '飘柔洗发水']})
'''商品分类表'''
commodity_classification = pd.DataFrame({'简称': ['方便面', '洗发'], '大类': ['食品饮料', '个人护理'], '子类': ['方便食品', '洗发水']})
''' 映射处理,构造键'''
commoditiesName_to_shortName = {
'康师傅方便面': '方便面',
'统一方便面': '方便面',
'飘柔洗发水': '洗发'
}
commodities['简称'] = commodities['商品名称'].map(commoditiesName_to_shortName)
'''merge合并'''
goal = pd.merge(commodities, commodity_classification)
考虑到数据中如有商品无简称的话,可以在merge操作中加上参数 how='outer' sssr 发表于 2020-7-11 14:18
import pandas as pd
老师,感谢您的回答。考虑到数据量多(需要从外部导入数据,这一步我会),手工做映射处理会不方便。
我是想直接用简称里的词,比如【方便面】在商品名称里查到【康师傅方便面】和【统一方便面】包含该词,就将【方便面】对应的商品分类信息合并/关联过来。 本帖最后由 sssr 于 2020-7-11 15:16 编辑
kabin 发表于 2020-7-11 14:53
老师,感谢您的回答。考虑到数据量多(需要从外部导入数据,这一步我会),手工做映射处理会不方便。
我 ...
编辑掉,看下面的 本帖最后由 sssr 于 2020-7-11 15:15 编辑
commoditiesName_to_shortName = {}
for i in commodities['商品名称']:
if '方便面' in i:
commoditiesName_to_shortName [ i ] = '方便面'
elif '洗发' in i:
commoditiesName_to_shortName [ i ] = '洗发'
sssr 发表于 2020-7-11 15:01
commoditiesName_to_shortName2 = {}
for i in commodities['商品名称']:
传过来出了问题,看下面的 sssr 发表于 2020-7-11 15:05
commoditiesName_to_shortName = {}
for i in commodities['商品名称']:
好了,代码不知道咋回事,传过来就格式乱了,自己去掉空格就行 sssr 发表于 2020-7-11 15:05
commoditiesName_to_shortName = {}
for i in commodities['商品名称']:
老师:我是小白,您多见谅。
想把if '方便面' 里的【方便面】这个值,直接从commodity_classification里调用过来,怎么写? 麻烦您了,谢谢
页:
[1]
2