我对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
但我真的无法弄明白从哪里开始...... 有遇到过这种问题的人吗?
答案 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_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_index('code')
适用于df1
和df2
,以便我们以后可以使用它进行加入。join
被用作&#34;左连接&#34;默认情况下在索引上。reset_index
应用于结果,以便检索具有所需列的数据框。