在pandas数据框中的列表中搜索



我正试图找出最有效的方法来搜索列表内的数据框架在python。例如,在pandas Dataframe

中有以下行
PLACES_DETECTED                                              PLACE_VALUES
[A14, A09, A08, A15, A03]               [-0.0369, -0.0065, 0.01, -0.0295, -0.0402]
[B10, B19, A18, A03, A14]               [-0.0641, 0.0419, -0.0196, 0.0747, -0.0]

我想搜索例如A14,并得到它的位置值,但我不知道是否有更好的方法来做到这一点,然后只是做一个for循环与许多if语句?

谢谢你的帮助!

我试过使用df。loc[df['PLACES_DETECTED'] == 'A14']这没有工作,但即使它有它并不能帮助我得到与它相关联的位置值,因为这是在数据框中的另一列。

PLACES_DETECTED列中的list中的值是唯一的(没有重复),您可以使用字典创建临时的Series,然后使用.str方法:

tmp = df.apply(
lambda x: dict(zip(x["PLACES_DETECTED"], x["PLACE_VALUES"])), axis=1
)
df["A14"] = tmp.str["A14"]
print(df)

打印:

PLACES_DETECTED                                PLACE_VALUES     A14
0  [A14, A09, A08, A15, A03]  [-0.0369, -0.0065, 0.01, -0.0295, -0.0402] -0.0369
1  [B10, B19, A18, A03, A14]    [-0.0641, 0.0419, -0.0196, 0.0747, -0.0] -0.0000

OR: Use.explode:

df = df.explode(["PLACES_DETECTED", "PLACE_VALUES"])
print(df[df.PLACES_DETECTED == "A14"])

打印:

PLACES_DETECTED PLACE_VALUES
0             A14      -0.0369
1             A14         -0.0

您还可以这样做:

def get_place_value(row, place):
places = row['PLACES_DETECTED']
values = row['PLACE_VALUES']
if place in places:
index = places.index(place)
return values[index]
return None
place_values = df.apply(lambda row: get_place_value(row, 'A14'), axis=1)

也会得到以下输出:

0   -0.0369
1   -0.0000

如果将列值转换为numpy数组,则更容易定位。

detected = np.array(df['PLACES_DETECTED'].tolist())
values = np.array(df['PLACE_VALUES'].tolist())

现在只是

values[detected == 'A14']

输出:

array([-0.0369, -0.    ])

相关内容

  • 没有找到相关文章

最新更新