python - 当范围太大时,会产生错误:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()
问题描述
下面的代码最多可用于 8000 行。不仅如此,它还会产生错误:Series 的真值是模棱两可的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
df 按“ID”排序。我需要用“ID”枚举填充“ENTRADA”列。
身份证... ENTRADA
150 ... 1
150 ... 2
150 ... 3
151 ... 1
152 ... 1
152 ... 2
有没有更简单的方法来做到这一点?
def preencheEntrada():
id_documento = 0
numEntrada = 0
for i in range(len(df)) :
valor_id_documento = df.loc[i, 'ID']
if (id_documento == valor_id_documento) :
numEntrada = numEntrada + 1
else :
id_documento = valor_id_documento
numEntrada = 1
df.loc[i, 'ENTRADA'] = numEntrada
解决方案
您不应该这样使用pandas
,而是始终尝试选择矢量化操作。
In [1]: import pandas as pd
In [2]: df = pd.DataFrame({"ID": [150, 150, 150, 151, 152, 152]})
In [3]: df
Out[3]:
ID
0 150
1 150
2 150
3 151
4 152
5 152
In [4]: df.groupby('ID').cumcount()
Out[4]:
0 0
1 1
2 2
3 0
4 0
5 1
dtype: int64
因此,如果您必须从 开始1
,您可以执行以下操作:
In [5]: df["ENTRADA"] = df.groupby("ID").cumcount() + 1
In [6]: df
Out[6]:
ID ENTRADA
0 150 1
1 150 2
2 150 3
3 151 1
4 152 1
5 152 2
无论如何,你得到的错误没有多大意义,它不应该取决于你的数据帧的长度,没有可重复的例子,我们只能推测。
推荐阅读
- dart - Future builder(future:) 正在递归我的 http 请求,
- python - 我的主机上的套接字编程问题
- php - array_keys 除了正确的结果返回错误的结果
- amazon-web-services - AWS CodePipeline:如何获得一个阶段的最后一次成功执行?
- powershell - PowerShell:用户未登录时系统找不到文件
- django - 使用 Django Rest Framework 向远程服务发出 post 请求
- c# - Asp.Net Core WebApi 的身份验证失败并显示“Unprotect ticket failed”
- javascript - 通过动态道具过滤数组(带有嵌套对象)
- c++ - C++ 将 csv 读入向量,getline() 问题
- java - MouseListener - MouseClicked