【问题标题】:Pandas Dataframe apply() method provides a row object, but how do you access the index valuePandas Dataframe apply() 方法提供了一个行对象,但是如何访问索引值
【发布时间】:2014-07-11 12:54:46
【问题描述】:

我是 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

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

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

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

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

非常感谢。

【问题讨论】:

  • 那个特定的错误正在发生,因为你输入了df.index(b)而不是df = df.set_index("b"),这就是为什么你得到一个NameError而不是KeyError . (修复它不会解决你的问题,但它会让这个问题更有意义..)
  • 感谢您的评论,但这是错误的 - 我在喝第一杯茶之前的错误帖子。有固定的帖子。

标签: python pandas apply


【解决方案1】:

我相信你想要的是这样的:

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'])

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

【讨论】:

  • 希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
  • 1970-01-01
  • 2015-08-27
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 1970-01-01
相关资源
最近更新 更多