【发布时间】:2021-11-06 21:37:09
【问题描述】:
我想以这种方式过滤 DataFrame,基于字典值。
dict = {
101 : 2500,
102 : 2700,
103 : 2000,
}
还有这样一个DataFrame:
| idx | match_id | type_name | second |
|---|---|---|---|
| 1 | 101 | Pass | 2400 |
| 2 | 101 | Shot | 2450 |
| 3 | 101 | Match_end | 2500 |
| 4 | 102 | Pass | 2700 |
| 5 | 102 | Match_end | 2600 |
| 6 | 103 | Match_end | 2000 |
我想要一行代码返回 match_id 值,其中 type_name==Match_end 和 second 等于字典中的值,其中键具有相同的 match_id 值。
在这种情况下,我想返回这个列表:[101,103]
因为在 DataFrame 内部,第 3 行和第 6 行符合条件(5 行不,因为它的second 值与dict.get(102) 不同)。
我尝试使用此代码但没有成功,因为使用 loc 我无法使用相对索引:
list = list(
df.loc[
(df["type_name"]=="Match_end")
& (df["second"] == dict.get(df["match_id"]))
]["match_id"].values
)
我需要第二个条件中的一些东西来帮助我根据每行的match_id 值使用字典。
是否有人建议做这件事(有或没有loc)?
NB我知道如何在“match_id”上使用 FOR CICLE,但我正在寻找一种不使用 FOR 循环的方法。
谢谢
【问题讨论】:
标签: python pandas optimization coding-style computer-science