kabin 发表于 2020-7-11 11:47

python,用pandas合并2个dataframe问题

有2个表,第一个表叫【商品】,里面含有商品的信息,示例内容如下:
商品名称
康师傅方便面
统一方便面
飘柔洗发水

第二个表叫【商品分类】,里面含有商品的简称和分类信息,示例内容如下:
简称         大类             子类
方便面         食品饮料            方便食品
洗发             个人护理            洗发水


查【商品】表里的【商品名称】中,是否包含【商品分类】表里的【简称】,如果包含,就将大类和子类合并过去,示例内容如下。
商品名称         简称         大类             子类
康师傅方便面      方便面         食品饮料            方便食品
统一方便面            方便面         食品饮料            方便食品
飘柔洗发水         洗发             个人护理            洗发水

请问各位老师,怎么实现呢?

Gloomy丶奈何 发表于 2020-7-11 13:24

for 简称in 简称list:
    if 简称 in 商品名称list:
      大类子类合并

sssr 发表于 2020-7-11 14:18

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)

sssr 发表于 2020-7-11 14:36

考虑到数据中如有商品无简称的话,可以在merge操作中加上参数 how='outer'

kabin 发表于 2020-7-11 14:53

sssr 发表于 2020-7-11 14:18
import pandas as pd




老师,感谢您的回答。考虑到数据量多(需要从外部导入数据,这一步我会),手工做映射处理会不方便。
我是想直接用简称里的词,比如【方便面】在商品名称里查到【康师傅方便面】和【统一方便面】包含该词,就将【方便面】对应的商品分类信息合并/关联过来。

sssr 发表于 2020-7-11 15:01

本帖最后由 sssr 于 2020-7-11 15:16 编辑

kabin 发表于 2020-7-11 14:53
老师,感谢您的回答。考虑到数据量多(需要从外部导入数据,这一步我会),手工做映射处理会不方便。
我 ...
编辑掉,看下面的

sssr 发表于 2020-7-11 15:05

本帖最后由 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:06

sssr 发表于 2020-7-11 15:01
commoditiesName_to_shortName2 = {}

for i in commodities['商品名称']:


传过来出了问题,看下面的

sssr 发表于 2020-7-11 15:17

sssr 发表于 2020-7-11 15:05
commoditiesName_to_shortName = {}

for i in commodities['商品名称']:


好了,代码不知道咋回事,传过来就格式乱了,自己去掉空格就行

kabin 发表于 2020-7-11 15:55

sssr 发表于 2020-7-11 15:05
commoditiesName_to_shortName = {}

for i in commodities['商品名称']:

老师:我是小白,您多见谅。
想把if '方便面' 里的【方便面】这个值,直接从commodity_classification里调用过来,怎么写? 麻烦您了,谢谢
页: [1] 2
查看完整版本: python,用pandas合并2个dataframe问题