当前位置: 首页 > 知识库问答 >
问题:

基于多个列的连接python

高山
2023-03-14

数据帧:

df1:

col1        col2        col3        col4        col5        col6        col7        col8 
7865                                                                                abc
                                    7269        689                                 def
            8726                                                                    ghi
                                                                        986         jkl
                                                7689                                mno
                        8762                                                        pqr
                                                                                    stu
                        9698                                                        vwx
            3568                                                                    yz

df2:

Scientific value         mapping_value
1                        8726
2                        9698
3                        3568
4                        986
5                        7269

我想将df1中的“col1、col2、col3、col4、col5、col6、col7”列值与df2中的“mapping_value”列相匹配,并在df1中创建一个名为“Scientific value”的新列,该列将包含来自df2中“Scientific value”列的条目。

输出:

col1        col2        col3        col4        col5        col6        col7        col8   Scientific value
7865                                                                                abc    
                                    7269        689                                 def    5
            8726                                                                    ghi    1
                                                                        986         jkl    4
                                                7689                                mno
                        8762                                                        pqr
                                                                                    stu
                        9698                                                        vwx    2
            3568                                                                    yz     3

谢谢

共有2个答案

范书
2023-03-14

我注意到:

  • df1中的所有列都是对象类型(实际上是字符串),
  • 但df2中的所有列(包括映射_值)都是int类型

因为在映射_值和列之间必须执行连接之类的操作。。。列,则必须将它们转换为公共类型,例如使用一些辅助对象。

所以首先要做的是创建一个“映射器”系列:

  • 值取自df2[“科学价值”],
  • 索引取自df2。映射_值,但已转换为字符串

这样做的代码是:

mapper = df2.set_index('mapping_value')['Scientific value']
mapper.index = mapper.index.astype(str); mapper

然后定义一个函数以获取科学值(在“负”情况下为“真”值或空字符串):

def getScVal(row):
    rw = row[:-1]    # without "col8" 
    rw = rw[rw != ''].to_frame('code').set_index('code')
    res = rw.join(mapper, how='inner')
    return res.iloc[0,0] if res.size > 0 else ''

要生成新列,请运行:

df1['Scientific value'] = df1.apply(getScVal, axis=1)
华景明
2023-03-14
#Data
df=pd.DataFrame({'col1':[9698, '',''],'col2':['', 7269, ''], 'col3':['','',986]})
df2=pd.DataFrame({'Scientific value':[1,2,3,4],'mapping_value':[9698,7269,986,304]})
#Create dict
d=dict(zip(df2['mapping_value'],df2['Scientific value']))
#Apply dict to dataframe
df.apply(lambda x: x.map(d))

后果

 类似资料:
  • 基于“SC”代码,我需要将SRCTable与RefTable-1或RefTable-2连接起来 条件:如果SC为“D”,则SRCTable在KEY=KEY1上与RefTable-1连接以获得值。否则,如果SC为“U”,则SRCTable与键=键2上的RefTable-2连接 这是输入spark数据帧。 预期产出: 注意:输入表将有数百万条记录,因此需要一个优化的解决方案

  • 谈到R编码,我目前有点墨守成规。我一直在尝试使用mutate、seq和rep函数来生成一个新列,该列迭代多个列值和不同的条件,但结果并不正确。下面是我的一些数据片段: 我希望按类型和特征 ID 对 lipidName 进行分组,然后查看类型特征 ID2,而不是不正确的数据表。如果它们具有相同的类型和特征 ID,则将它们计为脂质名称的相同脂质。如果它们具有相同的类型和特征ID2,则将它们计为脂质名称

  • 我是Kafka连线的新手。我有一个如下的用例: > 有一个共享主题,我在其中收到不同实体的消息,例如员工、部门(实际表名称不同) 员工和部门的模式在模式注册表中注册 使用Kafka接收器连接器,是否可以根据架构分离每个实体的数据并写入相应的表示例,进入主题的员工数据应转到员工表,部门数据应转到部门表 如果没有,还有其他更好的方法吗?

  • 我有5张桌子要放在一起。表格包括:访客、报价、合同1、合同2和合同3。 查询: 这里的问题是,contracts1、contracts2和contracts3并没有公共列以便连接在一起。因此,我得到的不是合同1的20行,合同2的30行,合同3的50行,而是所有这些的组合。因为它们是根据访问者和提供的表加入的。查询结束时使用简单的GROUP BY通常可以解决问题,但如果我在最后对其中一个表(或所有表

  • 在Powershell中,如何将5个字符串合并为一个字符串。

  • 问题内容: 基本上,我一直在尝试执行此操作(基于两列的计数不同): 一直在搜寻如何执行此操作,但是没有运气。尝试过此方法,但从未真正起作用。根据两个表的两个属性,这并没有明显的不同: 问题答案: 好的,这将采取一些步骤,请多多包涵。我在这里假设使用SQL Server,但说明应适用于支持1的任何方言: 创建支持该功能的自定义方言: { public MyCustomDialect() { Regi