我有一个数据框df
,并希望从中创建一个新的数据框df_b
,但只采用行列df['id']
的值在我的列表数组{{ 1}}。
list_of_ids
和df['id']
都包含字符串值。
我考虑过使用正则表达式,但是由于list_of_ids
的长度大于20个元素,因此正则表达式将非常庞大,因此在list_of_ids
上需要一个生成器,但是我不知道如何应用那个。
我在想类似的东西:
list_of_ids
或者我可以使用list_of_ids = ["thing1", "thing2", "thing3" ]
df_b = df[df["id"].apply(lambda x: x in list_of_ids)==True]
方法,但是传递一个由.str.contains()
的所有元素构建的字符串,这些元素之间用竖线'|'分隔,但是这样做似乎不是“干净”。
答案 0 :(得分:1)
生成示例DataFrame:
n = 50
df = pd.DataFrame({
'id': list(string.ascii_letters[:n]),
'n': range(n)})
df.head()
Out:
id n
0 a 0
1 b 1
2 c 2
3 d 3
4 e 4
从ids
列表中选择ID匹配的值:
ids = ['a', 'd', 'x', 'A']
df[df['id'].isin(ids)]
Out:
id n
0 a 0
3 d 3
23 x 23
26 A 26