如何根据条件将一列从数据框合并到另一个框?

时间:2020-06-27 20:28:02

标签: python pandas

我有以下csv文件:

file1.csv #dataframe is named dfFile1
Id,name,pos_neg,line
1,abc,pos,cas
2,cde,neg,work
3,efg,pos,cat
4,abc,pos,job

file2.csv #dataframe is named dfFile2
Id,ref,names,other
c10,n1,www,10.5
c11,m4,efg,5.4
c12,m5,cde,9.8
c13,m9,hhh,6.7
c14,n4,abc,12.5
c15,n9,kkk,3.4

我使用熊猫将其转换为数据帧。我想根据dfFile1的 name 字段中显示的唯一值获取与dfFile2的行匹配的第三个数据框,并从文件中添加 pos_neg 行1,所以我最终得到:

dfNew
Id,ref,names,other,pos_neg
c11,m4,efg,5.4,pos
c12,m5,cde,9.8,neg
c14,n4,abc,12.5,pos

到目前为止,我已经完成了以下操作:

list=[]
list=dfFile1["name"].unique()    #contains [abc,cde,efg]
dfFile2=dfFile2[dfFile2.names.isin(list)]

但是我只是不知道如何合并dfFile1中的列 pos_neg ,我尝试了以下操作:

dfNew=dfFile2.merge(dfFile2,dfFil1[["pos_neg"]],on=dfFile2)

,但不起作用。

有帮助吗?

谢谢

3 个答案:

答案 0 :(得分:1)

您快到了,只是通过DataFrame.merge方法进行了一些调整,此外,您还需要drop_duplicates,因为abcdfFile1中出现了两次。

dfNew = (
    dfFile2.merge(dfFile1[['name', 'pos_neg']], 
                  left_on='names', 
                  right_on='name')
    .drop_duplicates()
    .drop(columns='name')
)

    Id ref names  other pos_neg
0  c11  m4   efg    5.4     pos
1  c12  m5   cde    9.8     neg
2  c14  n4   abc   12.5     pos

旁注:在Python中,变量名不使用camelCase,而下划线camel_case小写。参见PEP8 style guide

函数名称应小写,必要时用下划线分隔单词,以提高可读性。

答案 1 :(得分:1)

您可以遍历数据框

df3 = df2[df2.names.isin(names)]

for index, row in df3.iterrows():
    row = df[row['names'] == df['name']]['pos_neg']
    df3.loc[index,'pos_neg'] = row.iloc[0]

row.loc [0]代表具有相同“名称”字段的行。首先获取相同名称的行

答案 2 :(得分:0)

尝试:

dfNew = dfFile2.merge(dfFile1[["name", "pos_neg"]], how="inner", left_on="names", right_on="name")

如果上述方法可行,重新排列列和/或重命名它们并不难。