熊猫Isin vs Numpy in1d

时间:2019-12-29 17:27:06

标签: python-3.x pandas dataframe

我正在基于列表中的值对数据框进行分组,并计划使用df.isin,但仅得到一个空数据框。我从另一篇文章中找到了方便的np.in1d函数,效果很好。我只是不确定df.isin为什么不起作用。这是一个示例:

df = pd.DataFrame(data = [['Bob', 8], ['Sally', 7], ['Sally', 10]], columns = ['name', 'score'])
print(df)

    name  score
0    Bob      8
1  Sally      7
2  Sally     10

接下来,np.in1d会像宣传的那样工作。

namelist = [['Sally', 'Betty', 'Harry']]
sally_np = df[np.in1d(df['name'], namelist)]
print(sally_np)

    name  score
1  Sally      7
2  Sally     10

最后,由于布尔值变为false,因此df.isin返回空数据帧。有人知道为什么这种比较是错误的吗?

sally = df[df['name'].isin(namelist)]
print(sally)

Empty DataFrame
Columns: [name, score]
Index: []

print(df['name'].isin(values=namelist))

0    False
1    False
2    False

1 个答案:

答案 0 :(得分:1)

将名称移出嵌套循环:

namelist = ['Sally', 'Betty', 'Harry']

失败,因为它正在搜索长度为1的列表,其中唯一的元素是列表