Python 不必传递整行以在pandas中创建新列?

Python 不必传递整行以在pandas中创建新列?,python,pandas,Python,Pandas,我使用以下函数从电影标题计算电影分辨率: def new__resolution(row): resolution = row['resolution'] if resolution == '4k/UHD': resolution = 'UHD' if resolution not in ('SD', 'HD', 'UHD'): resolution = None if '_HD_' in row['file_name']: resolution = 'HD'

我使用以下函数从电影标题计算电影分辨率:

def new__resolution(row):
    resolution = row['resolution']
    if resolution == '4k/UHD': resolution = 'UHD'
    if resolution not in ('SD', 'HD', 'UHD'): resolution = None
    if '_HD_' in row['file_name']: resolution = 'HD'
    if '_SD_' in row['file_name']: resolution = 'SD'
    return resolution
我创建的新列如下所示:

df['new__resolution'] = df.apply(new__resolution, axis=1)
我的问题是,这似乎是一种创建一个通过整行的新列的高压方法。有没有更好的方法,比如只传递列本身?比如:

df['new__resolution'] = df['resolution'].apply(new__resolution)
函数的前两行是:

def new__resolution(value):
    resolution = value
当传递单个列而不是整行时,该如何执行此操作



更新:事实上,现在我回顾了这个问题,我不能只传递一列,因为它取决于两个字段,而不仅仅是一个字段(分辨率、文件名)。考虑到这一点,有没有办法只传递两列,还是最好只传递整行?

将函数修改为

def new__resolution(row):
    resolution = row
    if resolution == '4k/UHD': resolution = 'UHD'
    if resolution not in ('SD', 'HD', 'UHD'): resolution = None
    if '_HD_' in row['file_name']: resolution = 'HD'
    if '_SD_' in row['file_name']: resolution = 'SD'
    return resolution

df['new__resolution'] = df['resolution'].map(new__resolution)

如果两列

df['new__resolution'] = df[['col1','col2']].apply(new__resolution, axis=1)

将您的函数修改为

def new__resolution(row):
    resolution = row
    if resolution == '4k/UHD': resolution = 'UHD'
    if resolution not in ('SD', 'HD', 'UHD'): resolution = None
    if '_HD_' in row['file_name']: resolution = 'HD'
    if '_SD_' in row['file_name']: resolution = 'SD'
    return resolution

df['new__resolution'] = df['resolution'].map(new__resolution)

如果两列

df['new__resolution'] = df[['col1','col2']].apply(new__resolution, axis=1)

谢谢,你能不能对这两个函数和你在这里做的事情再详细一点?主要是
映射
应用
之间的差异。另外,第二个函数的函数签名是什么样的?它是否仍然接受一行,并且传递的行只包含这两列?@David542当对series进行映射时,它与应用相同,但对于dataframe,我们需要应用。由于您拉出了行,所以我们尝试尽可能减少不必要的列以加快速度。我明白了。我现在明白第二个了。不过,在
地图
vs
apply
上仍然有点模糊。另外,你会建议上面两种方法中的哪一种?@David542我会应用,但是map对索引有好处,apply不是,你可以使用第二种方法,在第一种方法的一半时间内返回df.index.map()而不是df.index.applythanks。谢谢,你能对这两个函数和你在这里做的事情做一些详细说明吗?主要是
映射
应用
之间的差异。另外,第二个函数的函数签名是什么样的?它是否仍然接受一行,并且传递的行只包含这两列?@David542当对series进行映射时,它与应用相同,但对于dataframe,我们需要应用。由于您拉出了行,所以我们尝试尽可能减少不必要的列以加快速度。我明白了。我现在明白第二个了。不过,在
地图
vs
apply
上仍然有点模糊。另外,你会建议上面两种方法中的哪一种?@David542我会应用,但map对索引有好处,apply不是,你可以使用第二种方法,在第一种方法的一半时间内返回。