Python:从一个数据框获取值并添加到另一个数据框(行和列条件)

Hassan Dbouk |

假设我们有以下两个数据框:df1df2

x1 = [{'partner': "Afghanistan", 'trade_value':100, 'commodity': 1, 'year': 2013}, 
      {'partner': "Zambia",'trade_value':110, 'commodity': 2, 'year': 2016}, 
      {'partner': "Germany",'trade_value':120, 'commodity': 2, 'year': 2014},
      {'partner': "Afghanistan",'trade_value':150, 'commodity': 2, 'year': 2014},
      {'partner': "USA",'trade_value':1120, 'commodity': 5, 'year': 2013}];

df1 = pd.DataFrame(x1)

#Add GDP column
df1['GDP'] = 0;

x2 = [{'country': "Afghanistan", 'commodity': 5, 'GDP-2013': 5000, 'GDP-2014': 5500},
      {'country': "USA", 'commodity': 5, 'GDP-2013': 15012, 'GDP-2014': 16500},
      {'country': "Germany", 'commodity': 7, 'GDP-2013': 7500, 'GDP-2014': 8300}];

df2 = pd.DataFrame(x2)

我想做的是根据中显示的年份加上df1来自的国家的GDP df2df1

例如:在第一行df1,我想要得到的国内生产总值Afghanistan全年2013我将不得不通过df2与匹配找到该行countryGDP-year再拿到下的值GDP-year

的最终输出df1应如下所示:

|  partner   | trade_value | commodity |  year  |  GDP  | 
|------------|-------------|-----------|--------|-------|
| Afghanistan|     100     |     1     |  2013  |  5000 |
| Zambia     |     110     |     2     |  2016  |  NaN  |
| Germany    |     120     |     2     |  2014  |  8300 |
| Afghanistan|     150     |     2     |  2014  |  5500 |
| USA        |     1120    |     5     |  2013  |  16500|

我花了数小时尝试maploc方法,但没有任何效果。我目前正在研究的是:

for index, row in df2.iterrows():
    for column in df2:
         df1.loc[df1['partner'] == row['country'] and 'GDP-'+str(df1['year']) == column, ['GDP']] = row[column];

我收到以下错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
阿比

IIUC的使用:

x1 = [{'partner': "Afghanistan", 'trade_value':100, 'commodity': 1, 'year': 2013}, 
      {'partner': "Zambia",'trade_value':110, 'commodity': 2, 'year': 2016}, 
      {'partner': "Germany",'trade_value':120, 'commodity': 2, 'year': 2014},
      {'partner': "Afghanistan",'trade_value':150, 'commodity': 2, 'year': 2014},
      {'partner': "USA",'trade_value':1120, 'commodity': 5, 'year': 2013}];  
df1 = pd.DataFrame(x1)    

x2 = [{'country': "Afghanistan", 'commodity': 5, 'GDP-2013': 5000, 'GDP-2014': 5500},
      {'country': "USA", 'commodity': 5, 'GDP-2013': 15012, 'GDP-2014': 16500},
      {'country': "Germany", 'commodity': 7, 'GDP-2013': 7500, 'GDP-2014': 8300}];    
df2 = pd.DataFrame(x2)

# Melt the dataframe.
temp = df2.melt(id_vars=['commodity','country']).drop('commodity',1)
# Extract year and convert to int.
temp.variable = temp.variable.str.slice(4).astype(int)

# Then merge it with df1.
df3 = df1.merge(temp,left_on=['partner','year'],right_on=['country','variable'],how='left')
# Drop columns which are not required.
df3 = df3.drop(['country','variable'], axis=1).rename(columns={'value':'GDP'})

print (df3)

   commodity      partner  trade_value  year      GDP
0          1  Afghanistan          100  2013   5000.0
1          2       Zambia          110  2016      NaN
2          2      Germany          120  2014   8300.0
3          2  Afghanistan          150  2014   5500.0
4          5          USA         1120  2013  15012.0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将列从一个数据框添加到另一个python pandas

如何根据熊猫的条件将缺失的行从一个数据框添加到另一个数据框?

Python Pandas-在特定行上添加列,将特定行从一个数据框添加到另一个

将数据框列添加到另一个数据框

熊猫数据框-将列添加到另一个数据框

将条件添加到另一个数据框上的条件的数据框

在scala中将列从一个数据框添加到另一个数据框

R:如何将列从一个数据框添加到另一个数据框?

在条件下将数据框列的值添加到另一个数据框?

如何将一个数据框的行添加到另一个的列中

Python:将值从一个数据框添加到另一个(具有多个条件)

Python Pandas根据在另一个数据框中的查找将列添加到数据框

根据条件从另一个数据框列获取值

从一个数据框中获取列名称,并将其作为空列添加到pandas的另一个数据框中

熊猫有条件地将数据框添加到另一个数据框

根据条件R将数据框的元素添加到另一个数据框

如何将特定数据从一个数据框添加到另一个较大的数据框?

如何将值从数据框添加到另一个数据框以获取正确的索引?

如何从一个熊猫数据框中获取行值,并将其用作从另一个数据框中获取值的参考

Python Pandas-通过将标签匹配到列将值从一个数据框添加到另一个数据框

将数据框的切片添加到新列中的另一个数据框

根据来自另一个数据框的计数将列添加到数据框

如何使用另一个数据框将列添加到数据框?

根据来自另一个数据框的值将列添加到数据框

根据另一个数据框中的值将列添加到数据框中

R Studio:将数据框的列添加到另一个数据框(合并)

如何根据特定规则将一个数据框中的列添加到另一个数据框中

如何在pyspark中将列从另一个数据框添加到一个数据框?

Python:将一个数据框的值添加到另一数据框的某些行