首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Excel中使用Python实现多列的多对一映射

在Excel中使用Python实现多列的多对一映射
EN

Stack Overflow用户
提问于 2020-10-15 00:41:41
回答 1查看 381关注 0票数 0

在Excel中,我有一个类似下面的映射表,其中列B-L分别包含来自两个单独数据集的列标题的名称,需要将这些名称映射到由两个单独的数据集组成的新的串联数据集中的列A中的新列标题。

代码语言:javascript
运行
复制
A    B    C    D    E    F    G    H    I    J    K    L       
Ant  Car            Bin   
Bat  Bat            Gat  Rat  Mat  Sat  Pat  Fat  Cat  Hat

在上面的示例中,来自数据集1(列B)的Bat需要映射到新的级联数据集(列A)中的Bat,并且来自数据集2的列E-L中的列标题需要全部映射到Bat (列A),以便将数据集2中这些列下面的行中的数据相加在一起,即

代码语言:javascript
运行
复制
Bat = Gat + Rat + Mat + Sat + Pat + Fat + Cat + Hat

如果用户将来可以选择将数据集1或数据集2中的列分别添加到C-D或F-L列中,并期望Python代码能够识别这一点,并以上面的附加形式连接数据,则会出现上述增加的复杂性。

我知道pandas中的groupby功能可以用来对Gat, Mat, Sat etc进行额外的分组,但我不知道如何处理允许用户更改映射表的问题。

我曾考虑使用for循环迭代地检查每个单元格的值,以检查用户在C-D和F-L列下输入列标题的位置,并忽略NaN单元格,但是如何继续处理映射呢?

感谢您的帮助。

EN

Stack Overflow用户

发布于 2020-10-29 21:00:34

您需要创建一个二级映射,它是原始映射的转置,并且只包括具有多对一映射的列的子集(即Col L)。

对具有多个条目的行过滤此映射,即

代码语言:javascript
运行
复制
min_nas = 1
map_sub = map_sub.loc[:, (map_sub.notnull().sum(axis=0) > min_nas)]

转置回法线,使用pd.melt(),并附加回原始贴图,仅保留A、B和E列。然后按如下方式一对一地继续进行贴图:

代码语言:javascript
运行
复制
map_sub = map_sub.T
map_sub.reset_index(level='[insert name of Col A here]', inplace=True)
keys = [c for c in map_sub if c.startswith('[insert Col E-L name prefix here]')]
map_sub = pd.melt(map_sub, id_vars='[insert name of Col A here]', value_vars=keys, value_name='[insert name of Col E here]')

清理:

代码语言:javascript
运行
复制
map_sub = map_sub.dropna() # drop all rows and columns with nan
del map_sub['variable'] # remove variable column

附加到原始映射:

代码语言:javascript
运行
复制
newmapping = mapping.append(map_sub, sort=False, ignore_index=True)
newmapping = newmapping[['[insert name of Col A here]','[insert name of Col B here]', '[insert name of Col E here]']] # keep just 3 relevant columns for one-to-one mapping.

继续进行一对一的映射。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64357891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档