Python Pandas-将一列中的整数映射到新列中的字符串
熊猫数据帧df看起来像-Python Pandas-将一列中的整数映射到新列中的字符串,python,pandas,Python,Pandas,熊猫数据帧df看起来像- fileName objectsIdentified file_01.jpg 1, 2, 3 file_02.jpg 2, 3 file_03.jpg 1, 2, 4, 2 我想在新列objectName中按照以下命令进行映射: d={1:'obj1',2:'obj2',3:'obj3',4:'obj4'} 我做了什么?我写了一个函数,比如 def convls: 全球d 返回[d[x]表示ls中的x] 那我会的 df['objectName']=df[
fileName objectsIdentified
file_01.jpg 1, 2, 3
file_02.jpg 2, 3
file_03.jpg 1, 2, 4, 2
我想在新列objectName中按照以下命令进行映射:
d={1:'obj1',2:'obj2',3:'obj3',4:'obj4'}
我做了什么?我写了一个函数,比如
def convls:
全球d
返回[d[x]表示ls中的x]
那我会的
df['objectName']=df['ObjectSideIdentified']。applylambda x:convx
收到的输出:
fileName objectsIdentified objectName
file_01.jpg 1, 2, 3 obj1, obj2, obj3
file_02.jpg 2, 3 obj2, obj3
file_03.jpg 1, 2, 4, 2 obj1, obj2, obj4, obj2
问题-有没有一种方法可以在不定义我们自己的函数的情况下获得相同的结果?在这种情况下,我认为您最好使用str.split和str.join来理解列表
在这种情况下,我认为最好将列表理解与str.split和str.join一起使用
列表理解解决方案-对于objectsIdentified first split的每个值,然后将转换后的值映射到generator和last join中的整数: Pandas解决方案-按和创建序列,转换为整数,最后按组使用联接:
df['objectName'] = (df['objectsIdentified'].str.split(', ', expand=True)
.stack()
.astype(int)
.map(d)
.groupby(level=0)
.apply(', '.join))
列表理解解决方案-对于objectsIdentified first split的每个值,然后将转换后的值映射到generator和last join中的整数: Pandas解决方案-按和创建序列,转换为整数,最后按组使用联接:
df['objectName'] = (df['objectsIdentified'].str.split(', ', expand=True)
.stack()
.astype(int)
.map(d)
.groupby(level=0)
.apply(', '.join))
谢谢@Andy L。列表理解比函数更好!我希望有一种方法可以达到同样的效果。@AccLok:很高兴我能帮忙:。要使用本地熊猫,您需要链接几种方法来实现结果。从熊猫身上没有直接的方法。在这种情况下,我推荐列表理解,因为我认为它比链接熊猫的几种方法要快;特别是涉及分裂,更换和连接回。。。如果可能的话,你可以在本地大熊猫和列表理解之间对真实数据的速度进行计时,以查看速度差异;谢谢@Andy L。列表理解比函数更好!我希望有一种方法可以达到同样的效果。@AccLok:很高兴我能帮忙:。要使用本地熊猫,您需要链接几种方法来实现结果。从熊猫身上没有直接的方法。在这种情况下,我推荐列表理解,因为我认为它比链接熊猫的几种方法要快;特别是涉及分裂,更换和连接回。。。如果可能的话,你可以在本地大熊猫和列表理解之间对真实数据的速度进行计时,以查看速度差异;
df['objectName'] = (df['objectsIdentified'].str.split(', ', expand=True)
.stack()
.astype(int)
.map(d)
.groupby(level=0)
.apply(', '.join))