繁体   English   中英

使用pandas,如何比较两个数据帧中2列之间的值并将它们推送到新的数据帧?

[英]Using pandas, how can I compare the values between 2 columns from two dataframes and push them to a new dataframe?

所以我是Python的新手,我正在尝试使用Pandas使用两个现有值中的值来创建一个新的数据帧。 基本上使用这些数据帧:

df1= AB a '1' '3' b '4' '3' c '3' '2' d '9' '1'

df2= CD a '5' '1' b '2' '0' c '4' '2' d '1' '9'

我需要创建一个循环,将df1 [A]中每行的值与每行df2 [C]的值进行比较。 如果值相等,我需要加入df1 [A,B]和df2 [C]并将该行推送到第三个数据帧。 因此,对于上面的示例,结果应如下所示:

dfnew= ABD a '1' '3' '9' b '4' '3' '2'

由于并非我使用的所有值都是整数,因此我还需要将值视为字符串。

我一直在检查其他类似的问题,但没有一个答案似乎让我完全得到我需要做的。

我认为你需要merge默认的inner joindrop

df = pd.merge(df1, df2, left_on='A', right_on='C').drop('C', axis=1)

另一个带有rename列的解决方案:

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'

细节
只有mapassign我们留下了我们需要删除的行。

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'

我们也可以使用其他方式。 但那不是真正的问题所在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM