使用循环(python)合并两个不同的数据帧

时间:2018-02-28 09:51:44

标签: python pandas loops dataframe

我对python很新,遇到了以下问题。

我有两个数据帧,第一个看起来像这样:

df1
code  product
10-00  apple
10-10  banana
10-20  grape
10-00  cucumber
20-00  tomato
20-10  onion
20-10  garlic

,第二个看起来像:

df2
code  colour
10-00  green
10-10  yellow
10-20  purple
20-00  red
20-10  white

我想要一个可以提供以下数据帧的循环

df
10-00  apple  green
10-10  banana  yellow
10-20  grape  purple
10-00  cucumber  green
20-00  tomato  red
20-10  onion  white
20-10  garlic  white

但我真的无法弄明白从哪里开始...... 有遇到过这种问题的人吗?

3 个答案:

答案 0 :(得分:1)

试试这个(pd.DataFrame.merge

df = pd.merge(df1,df2,on=['code'],how='left')

示例:

import pandas as pd

df1 = pd.DataFrame({
    'code': ['10-00','10-10'],
    'product': ['apple','banana']
})

df2 = pd.DataFrame({
    'code': ['10-00','10-10'],
    'colour': ['green','yellow']
})

df = pd.merge(df1,df2,on=['code'],how='left')

print(df)

返回:

    code product  colour
0  10-00   apple   green
1  10-10  banana  yellow

答案 1 :(得分:0)

请勿使用循环,将df2列的code数据框编入索引,使用简单的赋值!

>>> df1.set_index('code', inplace=True)
>>> df2.set_index('code',inplace=True)
>>> df1
        product
code
10-00     apple
10-10    banana
10-20     grape
10-00  cucumber
20-00    tomato
20-10     onion
20-10    garlic
>>> df2
       colour
code
10-00   green
10-10  yellow
10-20  purple
20-00     red
20-10   white

然后简单地说:

>>> df1['colour'] = df2['colour']
>>> df1
        product  colour
code
10-00     apple   green
10-10    banana  yellow
10-20     grape  purple
10-00  cucumber   green
20-00    tomato     red
20-10     onion   white
20-10    garlic   white

如果你不想用代码索引df1(它会给你一个重复索引),你可以随时使用:

>>> df1['colour'] = df2.loc[df1['code']].values
>>> df1
    code   product  colour
0  10-00     apple   green
1  10-10    banana  yellow
2  10-20     grape  purple
3  10-00  cucumber   green
4  20-00    tomato     red
5  20-10     onion   white
6  20-10    garlic   white

只要df2

'code'编入索引

答案 2 :(得分:0)

这可以通过set_indexjoin

实现
df1.set_index('code').join(df2.set_index('code')).reset_index()

<强>结果

    code   product  colour
0  10-00     apple   green
1  10-00  cucumber   green
2  10-10    banana  yellow
3  10-20     grape  purple
4  20-00    tomato     red
5  20-10     onion   white
6  20-10    garlic   white

<强>解释

  • set_index('code')适用于df1df2,以便我们以后可以使用它进行加入。
  • join被用作&#34;左连接&#34;默认情况下在索引上。
  • reset_index应用于结果,以便检索具有所需列的数据框。