Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:iterrow循环的替代方案_Python_Pandas_Numpy_Dataframe - Fatal编程技术网

Python 熊猫:iterrow循环的替代方案

Python 熊猫:iterrow循环的替代方案,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我在pandas中运行了一个小函数,当我运行if x in y语句时,它会抛出一个ValueError。我看到了类似的问题,建议使用布尔索引,.isin()和where(),但我无法根据我的情况调整任何示例。如有任何建议,将不胜感激 附加说明:groups是包含数据帧外字符串的列表列表。我使用该函数的目标是查看数据框中的项目位于哪个列表中,然后返回该列表的索引。我在下面的笔记本链接中的第一个版本使用iterrows循环数据帧,但我知道在大多数情况下这是次优的 Jupyter笔记本上有一些虚假数据

我在pandas中运行了一个小函数,当我运行
if x in y
语句时,它会抛出一个ValueError。我看到了类似的问题,建议使用布尔索引,
.isin()
where()
,但我无法根据我的情况调整任何示例。如有任何建议,将不胜感激

附加说明:
groups
是包含数据帧外字符串的列表列表。我使用该函数的目标是查看数据框中的项目位于哪个列表中,然后返回该列表的索引。我在下面的笔记本链接中的第一个版本使用
iterrows
循环数据帧,但我知道在大多数情况下这是次优的

Jupyter笔记本上有一些虚假数据:

谢谢大家!

代码:


谢谢大家的帮助和回复。

使用
isin
的方法是首先调用
Series.isin(…)
生成布尔掩码,然后使用此掩码进行索引。或者,要在列表而不是序列上使用函数,可以调用
groupFinder(df['item'].values)
IIUC,只需几行即可使用Pandas:

import pandas as pd

# create master list of items
master = pd.Series(legumesGroup + herbGroup + radishGroup)

# assign group id as index
master.index = [0]*len(legumesGroup) + [1]*len(herbGroup) + [2]*len(radishGroup)

# sample from master with replacement to get itemList
itemList = master.sample(n=1000, replace=True)
现在,要获取
itemList
中每个项目所在的组,请调用
itemList
查看组ID和项目,或者只调用
itemList.index

itemList.head()
输出:

2        Horseradish
2           Rutabaga
2             Turnip
0          Chickpeas
0        Pinto beans

解决方案

我看到了一些pandas的博客文章,也从一位reddit用户那里得到了一些反馈,他给了我一个解决方案,通过使用pandas的apply函数跳过使用ItErrors

df['groupID2'] = df.item.apply(groupFinder)
df['groupID2'] = df.item.apply(groupFinder)

感谢大家的帮助和回复。

一般来说,在问题中加入数据链接不是一个好主意-链接可能会消失,一方面,另一方面,这会使帮助您变得更加困难。在这种情况下,单击链接也不会进入笔记本(尽管将URL字符串复制到浏览器中是可行的)。为了让其他人可以使用你的问题作为参考,考虑把你的示例数据和设置移动到你的文章的文本中。我一定会继续使用它。这是一个非常有趣的解决方案。我不会考虑向组项添加索引值。谢谢
df['groupID2'] = df.item.apply(groupFinder)