Python 使用pandas,如何比较两个数据帧中两列之间的值,并将它们推送到新的数据帧?
所以我是Python新手,我尝试使用Pandas来使用两个现有数据帧中的值创建一个新的数据帧。基本上使用这些数据帧:Python 使用pandas,如何比较两个数据帧中两列之间的值,并将它们推送到新的数据帧?,python,pandas,dataframe,Python,Pandas,Dataframe,所以我是Python新手,我尝试使用Pandas来使用两个现有数据帧中的值创建一个新的数据帧。基本上使用这些数据帧: df1= A B a“1”“3” b'4''3' c'3''2' d'9''1' df2= C D a“5”“1” b“2”“0” c'4''2' d'1''9' 我需要创建一个循环,将df1[a]中每一行的值与df2[C]中每一行的值进行比较。如果值相等,我需要连接df1[A,B]和df2[C],并将该行推送到第三个数据帧。因此,对于上述示例,结果应如下所示: dfnew=
df1=
A B
a“1”“3”
b'4''3'
c'3''2'
d'9''1'
df2=
C D
a“5”“1”
b“2”“0”
c'4''2'
d'1''9'
我需要创建一个循环,将df1[a]中每一行的值与df2[C]中每一行的值进行比较。如果值相等,我需要连接df1[A,B]和df2[C],并将该行推送到第三个数据帧。因此,对于上述示例,结果应如下所示:
dfnew=
A、B、D
“1”“3”“9”
b'4''3''2'
因为不是所有我处理的值都是整数,所以我还需要将这些值视为字符串
我一直在检查其他类似的问题,但似乎没有一个答案能完全满足我的要求。我认为您需要使用默认的内部连接
和:
另一种解决方案,具有用于联接的重命名列:
df = pd.merge(df1, df2.rename(columns={'C':'A'}), on='A')
print (df)
A B D
0 '1' '3' '9'
1 '4' '3' '2'
注意:
连接列中的值必须是唯一的。您也可以使用pd.Series.map
df1.assign(D=df1.A.map(dict(zip(df2.C, df2.D)))).dropna()
A B D
a '1' '3' '9'
b '4' '3' '2'
详细信息
仅使用映射
和分配
我们就剩下了需要删除的行
df1.assign(D=df1.A.map(df2.set_index('C').D))
A B D
a '1' '3' '9'
b '4' '3' '2'
c '3' '2' NaN
d '9' '1' NaN
我决定用一个简单的dropna
删除它们。更准确地说,我们可能应该将dropna
限制为D
列
df1.assign(D=df1.A.map(df2.set_index('C').D)).dropna(subset=['D'])
A B D
a '1' '3' '9'
b '4' '3' '2'
我们也可以用其他方法。但这并不是这个问题的真正含义。第一个问题非常有效!非常感谢!出于好奇,你知道我是否可以使用.drop来删除Bdrop('C',axis=1)
delete only columnC
,因此最简单的方法是在列表中定义要删除的列,如-。drop(['C','E','F',axis=1)
。
df1.assign(D=df1.A.map(df2.set_index('C').D)).dropna(subset=['D'])
A B D
a '1' '3' '9'
b '4' '3' '2'