Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas中以前列的新列_Python_Pandas_Dataframe - Fatal编程技术网

Python Pandas中以前列的新列

Python Pandas中以前列的新列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个带有一些列的数据框: >>data.columns.values array(['Sheet', 'Row', 'Column', 'Cell', 'V0', 'Thx', 'dV', 'Vd'], dtype=object) 每行包含图纸、行等的不同值 根据图纸、行等信息,我将创建一个PDF文件标题,如下所示: data['title'] = "Sheet%s_Row%s_Column%s_Cell%s" % (data['Sheet'], data['Row'], da

我有一个带有一些列的数据框:

>>data.columns.values
array(['Sheet', 'Row', 'Column', 'Cell', 'V0', 'Thx', 'dV', 'Vd'], dtype=object)
每行包含图纸、行等的不同值

根据图纸、行等信息,我将创建一个PDF文件标题,如下所示:

data['title'] = "Sheet%s_Row%s_Column%s_Cell%s" % (data['Sheet'], data['Row'], data['Column'], data['Cell'])
title=工作表%s\u行%s\u列%s\u单元格%s.pdf

因此,我希望直接创建另一列名为
title
的字符串,并像下面这样存储不同的标题,而不是迭代数据帧的每一行并每次创建一个标题:

data['title'] = "Sheet%s_Row%s_Column%s_Cell%s" % (data['Sheet'], data['Row'], data['Column'], data['Cell'])
但这不起作用,似乎是在每个
%s


如何从每行的信息中创建此
标题
列,而不必遍历整个数据帧?

一种方法是使用
DataFrame.apply()
axis=1
。范例-

data['title'] = data.apply(lambda row: "Sheet{}_Row{}_Column{}_Cell{}".format(row['Sheet'], row['Row'], row['Column'], row['Cell']) , axis=1)

演示-

In [52]: df = pd.DataFrame([['A','B'],['C','D'],['E','F']] , columns=['Sheet','row'])

In [53]: df
Out[53]:
  Sheet row
0     A   B
1     C   D
2     E   F

In [54]: df['title'] = df.apply(lambda row: "Sheet{}_row{}".format(row['Sheet'],row['row']) , axis=1)

In [55]: df
Out[55]:
  Sheet row        title
0     A   B  SheetA_rowB
1     C   D  SheetC_rowD
2     E   F  SheetE_rowF

下面是另一种方法,您可以事先指定对哪些列进行操作:

var = ['Sheet','row']

df['title'] = reduce(lambda x,y: x+'_'+y, [v + df[v] for v in var])

Out[284]:
  Sheet row        title
0     A   B  SheetA_rowB
1     C   D  SheetC_rowD
2     E   F  SheetE_rowF

感谢Anand,然而,在我的for循环解决方案中,我也使用了这个
行['Sheet']
,所以我要问:这个lambda函数是否也在整个数据帧上迭代?。谢谢是的,它正在迭代整个数据帧。只是迭代是pandas.ok内部的,所以我假设它可能比我的解决方案
for index,row in data.iterrows()更快。
取决于您对for循环所做的操作。要创建一个您想要的全新列,我认为没有任何向量化方法(尽管我可能是错的)。