Pandas以前列中的新列

时间:2015-09-16 07:29:09

标签: python pandas dataframe

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

>>data.columns.values
array(['Sheet', 'Row', 'Column', 'Cell', 'V0', 'Thx', 'dV', 'Vd'], dtype=object)

每行包含Sheet,Row等的不同值。

从Sheet,Row等信息中我将创建一个PDF文件标题:

title = Sheet%s_Row%s_Column%s_Cell%s.pdf

因此,我不是每次迭代DataFrame的每一行并创建一个单独的标题,而是想直接创建另一列名为title的字符串,并存储不同的标题,如下所示:

data['title'] = "Sheet%s_Row%s_Column%s_Cell%s" % (data['Sheet'], data['Row'], data['Column'], data['Cell'])

但这不起作用,似乎是在每个%s

中附加每个系列

如何从每行的信息创建此title列,而不必遍历整个DataFrame?

2 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是将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

答案 1 :(得分:1)

这是另一种方法,您可以在其中指定事先操作的列:

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