【发布时间】:2018-05-08 09:44:24
【问题描述】:
我有两个要合并的数据框。右侧数据框的连接列可能包含 通配符 值(例如:“ALL”),该值应与左侧数据框连接列中的 每个 值匹配。
想想下面这个最小的例子:
entities = pandas.DataFrame.from_dict([
{ 'name' : 'Boson', 'type' : 'Material' },
{ 'name' : 'Atman', 'type' : 'Ideal' },
])
recommendations = pandas.DataFrame.from_dict([
{ 'action' : 'recognize', 'entity_type' : 'ALL'},
{ 'action' : 'disdain', 'entity_type' : 'Material'},
{ 'action' : 'worship', 'entity_type' : 'Ideal'},
])
recommendations 可以解释为一组建议
“认识所有实体,无论其类型如何,蔑视物质实体,崇拜理想实体”)。我现在想要一个包含所有实体及其推荐操作的数据框。因此,在此示例中,生成的数据框应该看起来像
name recommendation type
0 Boson recognize Material
1 Boson disdain Material
2 Atman recognize Ideal
3 Atman worship Ideal
有没有熊猫的方法可以做到这一点?
我知道如何通过创建一个包含entities 和recommendations 的笛卡尔积的数据框然后根据条件将其削减。
我还可以想到一个解决方案,让我得到entitities 中存在的所有types 的系列,并为recommendations 中的每一行使用通配符类型为每种类型创建一行。
但在我真正的问题中,我实际上有多个列,我想用通配符值加入这些列。所以一个聪明高效的熊猫方式对我有很大帮助。
【问题讨论】:
-
我要说的是,您可以将建议分成两个框架:一个有通配符,一个没有通配符。但是你说你有很多包含通配符的列的最后一部分使这没有吸引力。我认为您最好只遍历列并构建一个扩展所有通配符的大框架。生成的扩展框架是否会太大而无法实用?
-
@JohnZwinck 我认为,你所说的“一个扩展了所有通配符的大框架”的意思与我想用“我得到实体中存在的一系列所有类型的解决方案”相同并为具有通配符类型的推荐中的每一行创建每一行”。是的,我可以这样做。但最好有一个使用 pandas dataFrame 结构的函数。如果我这样做,我觉得失去了 pandas.merge 的优势。但当然有可能,
-
@JohnZwinck 我的方法摆脱了迭代你怎么看?
标签: python pandas join merge wildcard