问题描述
例如,
p = {'val1': [10,20,30,40],'val2': [15,25,35,45]}
data = pd.DataFrame(p,columns=['val1','val2'])
data
我有此数据,并且执行了以下操作
inc = 100*((data.iloc[:,-1]/ data.iloc[:,-1-1])-1)
inc
结果是
0 50.000000
1 25.000000
2 16.666667
3 12.500000
dtype: float64
我要选择最大值和最大值的索引,我做了以下
(inc.idxmax(),max(inc))
我获得了以下结果
(0,50.0)
def increase(column):
inc = 100*((data.iloc[:,-column]/ data.iloc[:,-column-1])-1)
return (inc.idxmax(),max(inc))
我向后选择列。
并且我想将此功能应用于所有列
new_data = data.apply(increase)
使用此工具时出现错误
IndexError: positional indexers are out-of-bounds
如果我使用applymap,则会遇到相同的错误
我该怎么办?
解决方法
如果我理解正确,您想在函数中使用多个列。 此处的解决方案不是解决方案,因为它当时只在一行或一列(轴= 0或1)上工作。
所以我的建议是给我们,这样每次迭代输入2列:
def increase(col1,col2):
inc = 100*((col2/ col1)-1)
return (inc.idxmax(),max(inc))
lst = []
for i in range(len(data.columns)):
j=i+1
if j<len(data.columns):
col1 = data[data.columns[i]]
col2 = data[data.columns[j]]
lst.append(increase(col1,col2))
pd.DataFrame(lst)