我有一个pandas数据框,其中包含一些列中的数组。我想过滤数据框,只包含在该列的嵌套数组中找到特定值的行。
例如,我有一个类似这样的数据框:
label MODEL_INDEX ARRAY_VAL
ID
0 4 (11.0, 0.0)
1 65 (11.0, 10.0)
2 73 (11.0, 10.0)
3 74 (10.0, 0.0)
4 79 (11.0, 0.0)
5 80 (10.0, 0.0)
6 88 (11.0, 0.0)
我想过滤数据帧,只包括那些满足某些变量条件的数据,比如包含10.0,在ARRAY_VAL下的数组中得到这个:
label MODEL_INDEX ARRAY_VAL
ID
1 65 (11.0, 10.0)
2 73 (11.0, 10.0)
3 74 (10.0, 0.0)
5 80 (10.0, 0.0)
基本上,寻找类似的东西:
df[df['ARRAY_VAL'] where 10.0 in df['ARRAY_VAL]]
答案 0 :(得分:5)
您可以使用.apply
搜索数据框每行中的列表:
# creating the dataframe
df = pd.DataFrame(columns = ['model_idx','array_val'])
df.model_idx = [4,65,73,74,79,80,88]
df.array_val = [[11,0],
[11,10],
[11,10],
[10,0],
[11,0],
[10,0],
[11,0]]
# results is a boolean indicating whether the value is found in the list
results = df.array_val.apply(lambda a: 10 in a)
# filter the dataframe based on the boolean indicator
df_final = df[results]
过滤后的数据框为:
In [41]: df_final.head()
Out[41]:
model_idx array_val
1 65 [11, 10]
2 73 [11, 10]
3 74 [10, 0]
5 80 [10, 0]
答案 1 :(得分:3)
我认为需要apply
,因为您要为每个元组值10.0 in x
测试x
。
df[df['ARRAY_VAL'].apply(lambda x: 10.0 in x)]
答案 2 :(得分:0)
首先建立一个索引
index = []
for i, row in enumerate(df.ARRAY_VAL):
if 10.0 in row:
index.append(i)
然后将我们在10.0
df['ARRAY_VAL']
的数据编入索引
>>> df.loc[index]
MODEL_INDEX ARRAY_VAL
1 65 (11, 10)
2 73 (11, 10)
3 74 (10, 0)
5 80 (10, 0)