在我的数据框中,列由列表组成,例如:
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)
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)
使用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)