编写python代码,使用条件语句从现有列创建新的csv列

编写python代码,使用条件语句从现有列创建新的csv列,python,pandas,python-2.7,Python,Pandas,Python 2.7,我是python编码新手,希望基于现有列上的条件语句创建一个新列 我使用Python2.7版本,并在CentOs上运行代码 import pandas as pd file1 = pd.read_csv("/root/Documents/temp_file_{}.csv".format(timestr)) file1['FileName'] = '' file1['FileName'] =

我是python编码新手,希望基于现有列上的条件语句创建一个新列

我使用Python2.7版本,并在CentOs上运行代码

import pandas as pd                                                     
file1 = pd.read_csv("/root/Documents/temp_file_{}.csv".format(timestr))
file1['FileName'] = ''
file1['FileName'] = file1['FileType'].apply(lambda x: df['Path'].str.extract('[^/]+$', expand=False) if x=='f' else '')
file1.to_csv('/root/Documents/temp1_file_{}.csv'.format(timestr),index = False)
下面是我的CSV文件:

FileType,Path

d,/

f,/documents/csv/.zip

d,/documents/images

d,/hive/28374849

f,/hadoop/jdjdjd/dnejfn.img
FileType,Path,FileName

d,/,

f,/documents/csv/.zip,.zip

d,/documents/images,

d,/hive/28374849,

f,/hadoop/jdjdjd/dnejfn.img,dnejfn.img
所需的CSV文件:

FileType,Path

d,/

f,/documents/csv/.zip

d,/documents/images

d,/hive/28374849

f,/hadoop/jdjdjd/dnejfn.img
FileType,Path,FileName

d,/,

f,/documents/csv/.zip,.zip

d,/documents/images,

d,/hive/28374849,

f,/hadoop/jdjdjd/dnejfn.img,dnejfn.img

我想创建一个新的列文件名,其中该列中的数据应仅在列文件类型=='f'时从路径列中提取,否则该列中的数据应为空值或无数据

尝试使用此方法从路径中获取最后一部分。使用“/”作为分隔符从最右侧拆分字符串一次,并使用负索引获取最后一个元素(基本上是文件名):


file1['FileName'] = ''
file1['FileName'] = file1.apply(lambda x: x['Path'].rsplit("/", 1)[-1]  if x["FileType"]=='f' else '' , axis=1)

file1

FileType    Path    FileName
0   d   /   
1   f   /documents/csv/.zip .zip
2   d   /documents/images   
3   d   /hive/28374849  
4   f   /hadoop/jdjdjd/dnejfn.img   dnejfn.img
使用numpy的where,由于矢量化,它比应用函数快:

file1['FileName'] = np.where(file1["FileType"]=='f', file1['Path'].str.rsplit("/", n=1).str[-1], '')

FileType    Path    FileName
0   d   /   
1   f   /documents/csv/.zip .zip
2   d   /documents/images   
3   d   /hive/28374849  
4   f   /hadoop/jdjdjd/dnejfn.img   dnejfn.img


使用
numpy.where
pandas.Series.str.rsplit

import numpy as np
import pandas as pd

df['FileName'] = np.where(df['FileType'].eq('f'),df['Path'].str.rsplit('/').str.get(-1), '')
输出:

  FileType                       Path    FileName
0        d                          /            
1        f        /documents/csv/.zip        .zip
2        d          /documents/images            
3        d             /hive/28374849            
4        f  /hadoop/jdjdjd/dnejfn.img  dnejfn.img

numpy
是不需要的,但无论如何,这是一个解决方案。