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

使用循环(python)合并两个不同的数据帧,python,pandas,loops,dataframe,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 我希

我是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
但我真的不知道从哪里开始。。 有人遇到过这样的问题吗?

试试这个()

示例:

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

不要使用循环,通过
code
列索引
df2
数据帧,使用简单赋值

>>> 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'

索引,这可以通过
set\u index
join
实现:

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\u index('code')
    同时应用于
    df1
    df2
    ,以便我们以后可以使用它来加入
  • 默认情况下,
    join
    作为索引上的“左连接”应用
  • 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