比较两个不相等大小的 Dataframes 中 Pandas 中的列以进行条件检查
Compare columns in Pandas between two unequal size Dataframes for condition check
我有两个pandas DF。大小不等。例如:
Df1
id value
a 2
b 3
c 22
d 5
Df2
id value
c 22
a 2
不,我想从 DF1 中提取与 DF2 中具有相同 ID 的 行。现在我的第一个方法是 运行 2 for 循环,类似:
x=[]
for i in range(len(DF2)):
for j in range(len(DF1)):
if DF2['id'][i] == DF1['id'][j]:
x.append(DF1.iloc[j])
现在这没问题,但是对于一个 400,000 行和另一个 5,000 行的 2 个文件,我需要一种高效的 Pythonic+Pnadas 方式
您可以连接数据帧,然后检查所有元素是否都是 duplicated
or not , then drop_duplicates
并只保留第一次出现的元素:
m = pd.concat((df1,df2))
m[m.duplicated('id',keep=False)].drop_duplicates()
id value
0 a 2
2 c 22
你可以试试这个:
df = df1[df1.set_index(['id']).index.isin(df2.set_index(['id']).index)]
import pandas as pd
data1={'id':['a','b','c','d'],
'value':[2,3,22,5]}
data2={'id':['c','a'],
'value':[22,2]}
df1=pd.DataFrame(data1)
df2=pd.DataFrame(data2)
finaldf=pd.concat([df1,df2],ignore_index=True)
concat后的输出
id value
0 a 2
1 b 3
2 c 22
3 d 5
4 c 22
5 a 2
最终输出
finaldf.drop_duplicates()
id value
0 a 2
1 b 3
2 c 22
3 d 5
我有两个pandas DF。大小不等。例如:
Df1
id value
a 2
b 3
c 22
d 5
Df2
id value
c 22
a 2
不,我想从 DF1 中提取与 DF2 中具有相同 ID 的 行。现在我的第一个方法是 运行 2 for 循环,类似:
x=[]
for i in range(len(DF2)):
for j in range(len(DF1)):
if DF2['id'][i] == DF1['id'][j]:
x.append(DF1.iloc[j])
现在这没问题,但是对于一个 400,000 行和另一个 5,000 行的 2 个文件,我需要一种高效的 Pythonic+Pnadas 方式
您可以连接数据帧,然后检查所有元素是否都是 duplicated
or not , then drop_duplicates
并只保留第一次出现的元素:
m = pd.concat((df1,df2))
m[m.duplicated('id',keep=False)].drop_duplicates()
id value
0 a 2
2 c 22
你可以试试这个:
df = df1[df1.set_index(['id']).index.isin(df2.set_index(['id']).index)]
import pandas as pd
data1={'id':['a','b','c','d'],
'value':[2,3,22,5]}
data2={'id':['c','a'],
'value':[22,2]}
df1=pd.DataFrame(data1)
df2=pd.DataFrame(data2)
finaldf=pd.concat([df1,df2],ignore_index=True)
concat后的输出
id value
0 a 2
1 b 3
2 c 22
3 d 5
4 c 22
5 a 2
最终输出
finaldf.drop_duplicates()
id value
0 a 2
1 b 3
2 c 22
3 d 5