我有多个数据框,每个数据框大约有 500 万行。
每个数据框都有两列,分别称为 B
和 C
。此外,我还有两个值列表,其中第一个列表中的索引 0 对应于第二个列表中的索引 0。
我需要做的是获取完整数据框的一个子集,但两个列表中的值对于该特定索引都是真实的。
所以基本上:
df =
A B C
------------------
val1 val2 val3
val4 val5 val6
val7 val8 val9
list1 = ["val2", "val8"]
list2 = ["val3", "val9"]
然后如果我使用这个:
df.loc[(df['B'] == "val2") & (df['C'] == "val3")]
然后这将返回:
df_new =
A B C
------------------
val1 val2 val3
但我需要它为 list1
和 list2
中的所有列表项执行此操作,因此生成的 df 应该是:
df_new =
A B C
------------------
val1 val2 val3
val7 val8 val9
我正在考虑创建一个新列 (new_column
) 和新列表 (new_list
),两个列表名称连接在一起,然后运行:
df[df['new_column'].isin(new_list)]
但我有点担心,考虑到我必须对大约 500 万行和许多不同的数据帧执行此操作,这样效率很低。
是的,这有什么巧妙的技巧吗?
最佳答案
您可以使用列表(list1 和 list2)创建数据框并合并数据框:
u = pd.DataFrame({"B":list1,"C":list2})
df.merge(u)
#[df.merge(u) for df in df_list] for list
A B C
0 val1 val2 val3
1 val7 val8 val9
关于python - 数据框的子集,其中两列等于两个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67269166/