不必通过整个行来在熊猫中创建新列吗?

时间:2020-09-01 01:26:09

标签: 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'
    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

在传递单个列而不是整个行时如何处理?


更新:实际上,既然我回顾了这个问题,就不能只传递一列,因为它取决于两个字段,而不仅取决于一个字段(分辨率,文件名)。鉴于此,有没有办法只传递两列,还是我最好只传递整行?

1 个答案:

答案 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)
相关问题