在 Pandas 应用函数中获取行的索引 [英] getting the index of a row in a pandas apply function
问题描述
我正在尝试访问 Pandas 中应用于整个 DataFrame
的函数中的行索引.我有这样的事情:
I am trying to access the index of a row in a function applied across an entire DataFrame
in Pandas. I have something like this:
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
我将定义一个函数来访问给定行的元素
and I'll define a function that access elements with a given row
def rowFunc(row):
return row['a'] + row['b'] * row['c']
我可以这样应用它:
df['d'] = df.apply(rowFunc, axis=1)
>>> df
a b c d
0 1 2 3 7
1 4 5 6 34
太棒了!现在如果我想将索引合并到我的函数中怎么办?在添加 d
之前,此 DataFrame
中任何给定行的索引将是 Index([u'a', u'b', u'c', u'd'], dtype='object')
,但我想要 0 和 1.所以我不能只访问 row.index
.
Awesome! Now what if I want to incorporate the index into my function?
The index of any given row in this DataFrame
before adding d
would be Index([u'a', u'b', u'c', u'd'], dtype='object')
, but I want the 0 and 1. So I can't just access row.index
.
我知道我可以在存储索引的表中创建一个临时列,但我想知道它是否存储在某个行对象中.
I know I could create a temporary column in the table where I store the index, but I'm wondering if it is stored in the row object somewhere.
推荐答案
在这种情况下,要访问索引,请访问 name
属性:
To access the index in this case you access the name
attribute:
In [182]:
df = pd.DataFrame([[1,2,3],[4,5,6]], columns=['a','b','c'])
def rowFunc(row):
return row['a'] + row['b'] * row['c']
def rowIndex(row):
return row.name
df['d'] = df.apply(rowFunc, axis=1)
df['rowIndex'] = df.apply(rowIndex, axis=1)
df
Out[182]:
a b c d rowIndex
0 1 2 3 7 0
1 4 5 6 34 1
请注意,如果这确实是您要尝试执行的操作,那么以下操作会有效且速度更快:
Note that if this is really what you are trying to do that the following works and is much faster:
In [198]:
df['d'] = df['a'] + df['b'] * df['c']
df
Out[198]:
a b c d
0 1 2 3 7
1 4 5 6 34
In [199]:
%timeit df['a'] + df['b'] * df['c']
%timeit df.apply(rowIndex, axis=1)
10000 loops, best of 3: 163 µs per loop
1000 loops, best of 3: 286 µs per loop
编辑
3 年多以后再看这个问题,你可以这样做:
Looking at this question 3+ years later, you could just do:
In[15]:
df['d'],df['rowIndex'] = df['a'] + df['b'] * df['c'], df.index
df
Out[15]:
a b c d rowIndex
0 1 2 3 7 0
1 4 5 6 34 1
但假设它不是那么简单,无论您的 rowFunc
真正在做什么,您都应该考虑使用向量化函数,然后将它们用于 df 索引:
but assuming it isn't as trivial as this, whatever your rowFunc
is really doing, you should look to use the vectorised functions, and then use them against the df index:
In[16]:
df['newCol'] = df['a'] + df['b'] + df['c'] + df.index
df
Out[16]:
a b c d rowIndex newCol
0 1 2 3 7 0 6
1 4 5 6 34 1 16
这篇关于在 Pandas 应用函数中获取行的索引的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!