我具有以下功能,可以根据电影标题计算电影分辨率:
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
在传递单个列而不是整个行时如何处理?
更新:实际上,既然我回顾了这个问题,就不能只传递一列,因为它取决于两个字段,而不仅取决于一个字段(分辨率,文件名)。鉴于此,有没有办法只传递两列,还是我最好只传递整行?
答案 0 :(得分:2)
修改功能为
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)