假设有一个数据帧:
df1 =
A B C
0 1 a a1
1 2 b b2
2 3 c c3
3 4 d d4
4 5 e e5
5 6 f f6
创建身份:
a1 = [1,2,3,4,5,6]
a2 = ['a','b','c','d','e','f']
a3 = ['a1','b2','c3','d4','e5','f6']
df1 = pd.DataFrame(list(zip(a1,a2,a3)),columns=["A","B","C"])
在这里,我考虑将列A和B作为这个数据帧的主键。 因此,pk=[“a”,“b”]
。
我还有另一个列表,list1=[[2,'b'],[5,'e']]
,它是数据框架df[PK]
的子集。
有什么方法可以从数据框架DF中获取列表中与这些主键值相对应的行吗?
类似于:df1=df[df[PK].values.isin(list1)]
,它并不像我所期望的那样工作。
我希望得到输出df1,其形式为:
df1 =
A B C
1 2 b b2
4 5 e e5
还有一些类似的问题,我在这个门户里都经历过。 但是它们都没有向我展示如何像上面提到的那样在多列上基于筛选选择行。 提前谢谢你。
以下是如何使用pandas.dataframe.merge()
:
import pandas as pd
a1 = [1,2,3,4,5,6]
a2 = ['a','b','c','d','e','f']
a3 = ['a1','b2','c3','d4','e5','f6']
df1 = pd.DataFrame(list(zip(a1,a2,a3)),columns=["A","B","C"])
PK = ["A","B"]
list1 = [[2,'b'],[5,'e']]
df2 = df1.merge(pd.DataFrame(list1,columns=PK),on=PK)
print(df2)
输出:
A B C
0 2 b b2
1 5 e e5