大熊猫Dataframe中列表中的'Where子句'

wos*_*tom 3 python dataframe pandas

我有这种pandas Datamframe命名为df:

     email        | list
___________________________
email1@email.com  | [0,1]
email1@email.com  | [2,1]
email1@email.com  | [0,3]
email1@email.com  | [0,0]
email1@email.com  | [0,1]
Run Code Online (Sandbox Code Playgroud)

我想从具有0列表的df中检索所有行:[0,0]

我正在做:

df2 = df[df['list'] == [0,0]]
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

ValueError: Arrays were different lengths: 5 vs 2
Run Code Online (Sandbox Code Playgroud)

fir*_*ynx 5

这不起作用的原因:

df2 = df[df['list'] == [0, 0]]
Run Code Online (Sandbox Code Playgroud)

是因为df ['list']是一个5元素长的列表,并且[0, 0]是一个两元素长列表.它在评估你的面具时失败了

df['list'] == [0, 0]
Run Code Online (Sandbox Code Playgroud)

更新了正确的方案

我相信解决这个问题的最快方法是在数据帧的长度上创建一系列[0,0]元素,并将此系列与列进行比较

df['list'] == pd.Series([[0, 0]] * len(df))

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

这由每个比较创建的掩模元件在列表中[0, 0]而不是比较列表 df['list'][0, 0]

使用此掩码,您可以创建新的数据帧

mask = df['list'] == pd.Series([[0, 0]] * len(df))
df2 = df[mask]
Run Code Online (Sandbox Code Playgroud)