我正试图找出最有效的方法来搜索列表内的数据框架在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. ])