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