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

Pau*_*l H 4 python apply pandas

我是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)
Run Code Online (Sandbox Code Playgroud)

产生KeyError

KeyError: ('a', u'occurred at index -1.16119852166')
Run Code Online (Sandbox Code Playgroud)

问题是my_test2方法中的行['a']失败.如果我不做df.set_index('a')它可以正常工作,但我确实想要一个索引.

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

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

提前谢谢了.

BKa*_*Kay 5

我相信你想要的是这个:

def my_test(row):
   return "{}.{}".format(row.name, row['b'])
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为:

"{}.{}".format("ham", "cheese")
Run Code Online (Sandbox Code Playgroud)

回报

'ham.cheese'
Run Code Online (Sandbox Code Playgroud)

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

df.iloc[0].name
Run Code Online (Sandbox Code Playgroud)

回报

b                           foo
c                      1.417726
Value    0.7842562355491481.foo
Name: 0.784256235549, dtype: object 
Run Code Online (Sandbox Code Playgroud)

因此,此函数等效于查找第i行的索引并执行此命令

"{}.{}".format(df.iloc[i].name, df.iloc[i]['b'])
Run Code Online (Sandbox Code Playgroud)

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