pandas 如何根据条件将一个 Dataframe 中的列合并到另一个 Dataframe 中?

omjgkv6w  于 2022-11-27  发布在  其他
关注(0)|答案(3)|浏览(139)

我有以下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的行匹配的第三个 Dataframe ,并添加文件1中的pos_neg行,因此我将以以下内容结束:

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)

不幸的是,它不起作用。

laik7k3q

laik7k3q1#

你几乎已经做到了,只是对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
函数名应小写,必要时用下划线分隔单词,以提高可读性。

qco9c6ql

qco9c6ql2#

可以使用迭代行迭代 Dataframe

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]代表具有相同'name'字段的行。获取第一个同名行

djmepvbi

djmepvbi3#

试试看:

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

如果上面的方法有效,重新排列列和/或重命名列应该不难。

相关问题