熊猫:比较系列中的列表对象

Shi*_*Hoo 11 python pandas

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

df = pd.DataFrame({'A':[[1,2],[2,4],[3,1]]})
Run Code Online (Sandbox Code Playgroud)

我需要在这个数据帧中找出列表[1,2]的位置.我试过了:

df.loc[df['A'] == [1,2]]
Run Code Online (Sandbox Code Playgroud)

df.loc[df['A'] == [[1,2]]]
Run Code Online (Sandbox Code Playgroud)

但完全失败了.比较似乎很简单,但这不起作用.我在这里错过了什么吗?

WeN*_*Ben 13

不要list在单元格中使用,它会产生很多问题pandas.如果确实需要object列,请使用tuple:

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)])]
Run Code Online (Sandbox Code Playgroud)


San*_*apa 10

您可以使用apply和比较:

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

0     True
1    False
2    False
Name: A, dtype: bool
Run Code Online (Sandbox Code Playgroud)
print(df[df['A'].apply(lambda x: x==[1,2])])

        A
0  [1, 2]
Run Code Online (Sandbox Code Playgroud)


piR*_*red 9

使用Numpy阵列

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
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的解决方案![或者,如果可能的话,只需将系列列表扩展为2个系列.] (2认同)
  • @ALollz是的,是的 (2认同)

Vai*_*ali 6

使用numpy

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

0     True
1    False
2    False
Run Code Online (Sandbox Code Playgroud)