CoderAnswer - 程序员编程问答

使用元素作为列表切割Dataframe

by @Amay

python pandas

我的数据框有列表作为元素,我希望有更有效的方法来检查某些条件。 <p>My dataframe looks like this

col_a   col_b
0   100 [1, 2, 3]
1   200 [2, 1]
2   300 [3]

我想只得到col_b中有1的那些行。 <p>I have tried the naive way temp_list =列表()

for i in range(len(df1.index)):    
    if 1 in df1.iloc[i,1]:
        temp_list.append(df1.iloc[i,0])

对于像这样的大型数据帧,这需要花费大量时间。我怎样才能使这种数据帧的搜索效率更高?


3个答案

0 by @yatu

您可以使用列表解析来检查给定列表中是否存在1,并使用结果执行[boolean indexation](https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing .html)关于数据帧:

df.loc[[1 in i for i in df.col_B ],:]

    col_a      col_B
0    100  [1, 2, 3]
1    200     [2, 1]
0 by @jezrael

使用boolean indexing列表理解和seelct列的loc col_a:

a = df1.loc[[1 in x for x in df1['col_b']], 'col_a'].tolist()
print (a)
[100, 200]

如果需要选择第一列:

a = df1.iloc[[1 in x for x in df1['col_b']], 0].tolist()
print (a)
[100, 200]
0 by @VnC
df[df.col_b.apply(lambda x: 1 in x)]

结果:

col_a   col_b
0   100 [1, 2, 3]
1   200 [2, 1]

相关问题