我正在基于列表中的值对数据框进行分组,并计划使用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
答案 0 :(得分:1)
将名称移出嵌套循环:
namelist = ['Sally', 'Betty', 'Harry']
失败,因为它正在搜索长度为1的列表,其中唯一的元素是列表