首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用循环合并两个不同的数据格式(python)

用循环合并两个不同的数据格式(python)
EN

Stack Overflow用户
提问于 2018-02-28 09:51:44
回答 3查看 145关注 0票数 1

我对python非常陌生,遇到了以下问题。

我有两个数据处理程序,第一个看起来是这样的:

代码语言:javascript
复制
df1
code  product
10-00  apple
10-10  banana
10-20  grape
10-00  cucumber
20-00  tomato
20-10  onion
20-10  garlic

第二个看起来是:

代码语言:javascript
复制
df2
code  colour
10-00  green
10-10  yellow
10-20  purple
20-00  red
20-10  white

我希望有一个循环,它将给出以下数据

代码语言:javascript
复制
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

但我真的想不出从哪里开始..。有谁有过这样的问题吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-28 09:52:58

试试这个(pd.DataFrame.merge)

代码语言:javascript
复制
df = pd.merge(df1,df2,on=['code'],how='left')

示例:

代码语言:javascript
复制
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)

返回:

代码语言:javascript
复制
    code product  colour
0  10-00   apple   green
1  10-10  banana  yellow
票数 1
EN

Stack Overflow用户

发布于 2018-02-28 09:56:54

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

代码语言:javascript
复制
>>> 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

然后简单地说:

代码语言:javascript
复制
>>> 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 (它会给您提供一个重复的索引),那么您可以始终使用:

代码语言:javascript
复制
>>> 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'索引

票数 0
EN

Stack Overflow用户

发布于 2018-02-28 10:07:19

这在set_indexjoin中是可能的。

代码语言:javascript
复制
df1.set_index('code').join(df2.set_index('code')).reset_index()

结果

代码语言:javascript
复制
    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作为索引上的“左联接”应用。
  • reset_index应用于结果,以便检索具有所需列的数据。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49026520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档