Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.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 熊猫:比较序列中的列表对象_Python_Pandas - Fatal编程技术网

Python 熊猫:比较序列中的列表对象

Python 熊猫:比较序列中的列表对象,python,pandas,Python,Pandas,在我的数据框架中,列由列表组成,例如: df = pd.DataFrame({'A':[[1,2],[2,4],[3,1]]}) 我需要找出列表[1,2]在这个数据帧中的位置。我试过: df.loc[df['A'] == [1,2]] 及 但完全失败了。比较起来似乎很简单,但这根本不起作用。我在这里遗漏了什么吗?不要在单元格中使用列表,这会给熊猫带来很多问题。如果确实需要对象列,请使用元组: df.A.map(tuple).isin([(1,2)]) Out[293]: 0 Tru

在我的数据框架中,列由列表组成,例如:

df = pd.DataFrame({'A':[[1,2],[2,4],[3,1]]})
我需要找出列表[1,2]在这个数据帧中的位置。我试过:

df.loc[df['A'] == [1,2]]


但完全失败了。比较起来似乎很简单,但这根本不起作用。我在这里遗漏了什么吗?

不要在单元格中使用
列表
,这会给
熊猫
带来很多问题。如果确实需要
对象
列,请使用
元组

df.A.map(tuple).isin([(1,2)])
Out[293]: 
0     True
1    False
2    False
Name: A, dtype: bool
#df[df.A.map(tuple).isin([(1,2)])]

您可以使用
apply
并进行如下比较:

df['A'].apply(lambda x: x==[1,2])

0     True
1    False
2    False
Name: A, dtype: bool

使用numpy

df.A.apply(lambda x: (np.array(x) == np.array([1,2])).all())

0     True
1    False
2    False
使用Numpy数组 或:

然后:


这应该是公认的解决方案![或者,如果可能,只是将列表系列扩展为2个系列。]如果列表大小不同,这不会出现问题,尽管这可能超出了本示例的范围。@ALollz yes and yesNice!我唯一关心的是,这个解决方案将数据类型转换两次,如果我的数据帧非常大,那么转换会花费更多的时间吗?您唯一“缺少”的是,数据帧对于存储列表来说并不是很好。你为什么不想要两个单独的专栏?@BallpointBen谢谢你的关注,我发布了一个新问题来解释整个问题@Luuklag这可能是重复的,但我不相信这是你建议的目标的重复。这似乎是试图根据多列是否等于特定值进行筛选。这一个试图检查列表是否等于一个列的值,该值的答案非常不同。请随意建议一个更合适的目标。@Luuklag,我发布了这两个问题,因为我认为它们不一样。正如jpmc所描述的,它们是相互联系的,但也非常不同。这篇文章实际上是那篇文章的变体:我试图用愚蠢的事情来解决那篇文章,并基于我发表的这篇文章的愚蠢的事情。但这一点仍然有其独特的价值。你能删除重复的目标吗?
print(df[df['A'].apply(lambda x: x==[1,2])])

        A
0  [1, 2]
df.A.apply(lambda x: (np.array(x) == np.array([1,2])).all())

0     True
1    False
2    False
df.assign(B=(np.array(df.A.tolist()) == [1, 2]).all(1))

        A      B
0  [1, 2]   True
1  [2, 4]  False
2  [3, 1]  False
df['A'].apply(([1,2]).__eq__)
df[df['A'].apply(([1,2]).__eq__)]