gpt4 book ai didi

python - 在 pandas apply 函数中获取行的索引

转载 作者:行者123 更新时间:2023-12-03 04:54:33 35 4
gpt4 key购买 nike

我正在尝试访问应用于 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(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

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

最佳答案

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

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

请注意,如果这确实是您想要做的事情,那么以下方法可以工作并且速度更快:

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

编辑

三年多后再看这个问题,你可以这样做:

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 索引使用它们:

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

关于python - 在 pandas apply 函数中获取行的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26658240/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com