获取函数中行的索引

我正在尝试访问函数中的一行索引,该函数应用于Pandas中的整个DataFrame。我有这样的想法:

df=pandas.DataFrame([[1,2,3],[4,5,6]],columns=['a','b','c']))
&燃气轮机&燃气轮机&燃气轮机;df
a、b、c
0  1  2  3
1  4  5  6

我将定义一个函数,用于访问具有给定行的元素

def rowFunc(行):
返回行['a']+行['b']*行['c']

我可以这样应用它:

df['d']=df.apply(rowFunc,axis=1)
&燃气轮机&燃气轮机&燃气轮机;df
a、b、c、d
0  1  2  3   7
1  4  5  6  34

太棒了!现在,如果我想将索引合并到我的函数中呢?
在添加d之前,此数据帧中任何给定行的索引将是索引([u'a',u'b',u'c',u'd'],dtype='object'),但我需要0和1。所以我不能只访问行.index

我知道我可以在存储索引的表中创建一个临时列,但我想知道它是否存储在row对象的某个地方

在这种情况下,要访问索引,请访问name属性:

[182]on

:
df=pd.DataFrame([[1,2,3],[4,5,6]],列=['a','b','c'])
def rowFunc(世界其他地区):
返回行['a']+行['b']*行['c']
def行索引(行):
返回row.name
df['d']=df.apply(rowFunc,axis=1)
df['rowIndex']=df.apply(rowIndex,axis=1)
df
Output[182]:
b、c、d行索引
0  1  2  3   7         0
1  4  5  6  34         1

请注意,如果这确实是您正在尝试的操作,则以下操作会起作用,并且速度会快得多:

[198]on

:
df['d']=df['a']+df['b']*df['c']
df
Output[198]:
a、b、c、d
0  1  2  3   7
1  4  5  6  34
At[199]on:
%timeit df['a']+df['b']*df['c']
%timeit df.apply(行索引,轴=1)
10000个回路,最好为3个:每个回路163µs
1000个回路,最好为3个:每个回路286µs

编辑

3年多后再看这个问题,你可以:

[15]on

:
df['d'],df['rowIndex']=df['a']+df['b']*df['c'],df.index
df
Output[15]:
b、c、d行索引
0  1  2  3   7         0
1  4  5  6  34         1

但是,假设它没有这么简单,无论您的rowFunc真正在做什么,您都应该使用向量化函数,然后针对df索引使用它们:

[16]on

:
df['newCol']=df['a']+df['b']+df['c']+df.index
df
Output[16]:
a b c d行索引newCol
0  1  2  3   7         0       6
1  4  5  6  34         1      16

发表评论