python - Pandas Dataframe apply() 方法提供了一个行对象,但是如何访问索引值

标签 python pandas apply

我是 Panda 和 DataFrames 的新手,遇到了一个问题。 DataFrame.apply() 方法将行参数传递给提供的函数。但是我似乎无法从这个行参数中找出对应于该行的索引值是什么。

一个例子

df = DataFrame ({'a' : np.random.randn(6),
         'b' : ['foo', 'bar'] * 3,
         'c' : np.random.randn(6)})

df = df.set_index('a')

def my_test2(row):
   return "{}.{}".format(row['a'], row['b'])

df['Value'] = df.apply(my_test2, axis=1)

产生一个键错误

KeyError: ('a', u'occurred at index -1.16119852166')

问题是 my_test2 方法中的 row['a'] 失败了。如果我不执行 df.set_index('a') 它工作正常,但我确实希望在 a 上有一个索引。

我尝试复制列 a(一次作为索引,一次作为列)并且这有效,但这看起来很丑陋且有问题。

关于如何在给定行对象的情况下获取相应索引值的任何想法?

非常感谢。

最佳答案

我相信你想要的是这个:

def my_test(row):
   return "{}.{}".format(row.name, row['b'])

之所以可行,是因为:

"{}.{}".format("ham", "cheese")

返回

'ham.cheese'

如果您引用单行,name 属性返回索引。对于上面的例子:

df.iloc[0].name

返回

b                           foo
c                      1.417726
Value    0.7842562355491481.foo
Name: 0.784256235549, dtype: object 

因此这个函数相当于找到第i行的索引并执行这个命令

"{}.{}".format(df.iloc[i].name, df.iloc[i]['b'])

然后 apply 函数对所有行执行此操作。

关于python - Pandas Dataframe apply() 方法提供了一个行对象,但是如何访问索引值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24698283/

相关文章:

python - 如何使用 django process_request 更改 url。

python - Pandas:使用不同的值填充组中相同索引的行

python - 需要在 pandas 的数据帧上聚合计数(rowid,colid)

r - 使用lapply制作表格

javascript - 使用函数的字符串名称应用 JavaScript 函数

python - 强制 pandas 将列中的 (1,2) 解释为字符串而不是范围?

python - 在odoo中使用同一字段添加多个条目

Python 代码比相同的 C++ 代码慢得多?

python - 如何正确删除 Scikit-Learn 的 DPGMM 的冗余组件?

pandas - 如何在 Pandas 中有效地替换行值和索引标签?