我们的目标是使用applyarray的范围进行切片,并应用NumPy argmax.

然而,编译器返回TypeError

TypeError: slice indices must be integers or None or have an __index__ method 

对于以下代码

作为pd进口大Pandas

arr=np.array([10,2,5,3,6,8,3,3,2,5,6,8,11,14,11,100,1,3,20,21])
arr=arr.reshape((1,-1))
df=pd.DataFrame(zip([4,7],[15,18],[25,40]),columns=['lb','rb','mv'])
df['ss'] = df.apply(lambda x: np.argmax(arr[0][x['lb']:x['rb']] >= 0.3 * x['mv'] ), axis=1)
df['cc']=0.3 *df['mv']
df['es'] = df.apply(lambda x: np.argmax(arr[0][x['ss']:-1] < x['cc'] ), axis=1)

但是,如果我修改这两行

df['cc']=0.3 *df['mv']
df['es'] = df.apply(lambda x: np.argmax(arr[0][x['ss']:-1] < x['cc'] ), axis=1)

进入

df['es'] = df.apply(lambda x: np.argmax(arr[0][x['ss']:-1] < 0.3 *x['mv'] ), axis=1)

这个节目很有魅力.

我很好奇为什么会出现这个问题.

推荐答案

问题是,如果通过applyaxis=1使用循环,那么乘以浮点值将返回每行的浮点值:

df['cc']=0.3 *df['mv']

def f(x):
    print(x)
lb     4.0
rb    15.0
mv    25.0
ss     1.0
cc     7.5
Name: 0, dtype: float64
lb     7.0
rb    18.0
mv    40.0
ss     6.0
cc    12.0
Name: 1, dtype: float64
df['es'] = df.apply(f  , axis=1)

如果所有整数列的输出都是每行的整数:

def f(x):
    print(x)
lb     4
rb    15
mv    25
ss     1
Name: 0, dtype: int64
lb     7
rb    18
mv    40
ss     6
Name: 1, dtype: int64

df['es'] = df.apply(f, axis=1)

因此,将x['ss']转换为整数将正常工作:

df['cc']=0.3 *df['mv']
df['es'] = df.apply(lambda x: np.argmax(arr[0][int(x['ss']):-1] < x['cc'] ), axis=1)

print (df)
   lb  rb  mv  ss    cc  es
0   4  15  25   1   7.5   0
1   7  18  40   6  12.0   0

Python相关问答推荐

Pandas数据帧处理Pandas表中Json内的嵌套列表以获取后续Numpy数组

当pip为学校作业(job)安装sourcefender时,我没有收到匹配的分发错误.我已经try 过Python 3.8.10和3.10.11

如何使用函数正确索引收件箱?

使用Beautiful Soup获取第二个srcset属性

比较两个二元组列表,NP.isin

如何自动抓取以下CSV

我从带有langchain的mongoDB中的vector serch获得一个空数组

运行总计基于多列pandas的分组和总和

运行Python脚本时,用作命令行参数的SON文本

在Pandas DataFrame操作中用链接替换'方法的更有效方法

根据二元组列表在pandas中创建新列

如何在Django基于类的视图中有效地使用UTE和RST HTIP方法?

如何将多进程池声明为变量并将其导入到另一个Python文件

Python列表不会在条件while循环中正确随机化'

如何使用SentenceTransformers创建矢量嵌入?

使用Python和文件进行模糊输出

与命令行相比,相同的Python代码在Companyter Notebook中运行速度慢20倍

Polars asof在下一个可用日期加入

OpenGL仅渲染第二个三角形,第一个三角形不可见

使用__json__的 pyramid 在客户端返回意外格式