![](/img/trans.png)
[英]Add summary columns to a pandas dataframe based on matching values in a different dataframe
[英]Python: In Pandas extract data from several columns in a dataframe based on a condition and add to different dataframe matching on a column
我有以下格式的大數據集:
import pandas as pd
df1 = pd.DataFrame({'Date':['01/02/2020' , '01/03/2020', '01/04/2020','01/02/2020' , '01/03/2020', '01/04/2020','01/02/2020' , '01/03/2020', '01/04/2020'],
'From': ['RU', 'RU', 'RU','USA', 'USA', 'USA','ME', 'ME', 'ME'],
'To': ['JK', 'JK', 'JK','JK', 'JK', 'JK','JK', 'JK', 'JK'],
'Distance':[ 40000, 40000, 40000,30000, 30000, 30000,20000, 20000, 20000],
'Days': [8,8,8,6,6,6,4,4,4]})
df2 = pd.DataFrame({'Date':['01/02/2020' , '01/03/2020', '01/04/2020','01/02/2020' , '01/03/2020', '01/04/2020','01/02/2020' , '01/03/2020', '01/04/2020'],
'Contract': ['OrangeTier', 'OrangeTier', 'OrangeTier','AppleTier', 'AppleTier', 'AppleTier','GrapeTier', 'GrapeTier', 'GrapeTier'],
'Price':[ 10000, 15000, 20000,30000, 35000, 1000,45000, 20000, 21000]})
我想向 df1 添加一列,它查找合同“OrangieTier”,將 df1 中的日期與 df2 匹配並返回價格。 導致數據框看起來像這樣:
df1 = pd.DataFrame({'Date':['01/02/2020' , '01/03/2020', '01/04/2020','01/02/2020' , '01/03/2020', '01/04/2020','01/02/2020' , '01/03/2020', '01/04/2020'],
'From': ['RU', 'RU', 'RU','USA', 'USA', 'USA','ME', 'ME', 'ME'],
'To': ['JK', 'JK', 'JK','JK', 'JK', 'JK','JK', 'JK', 'JK'],
'Distance':[ 40000, 40000, 40000,30000, 30000, 30000,20000, 20000, 20000],
'OrangeTier':[10000, 15000, 20000,10000, 15000, 20000,10000, 15000, 20000],
'Days': [8,8,8,6,6,6,4,4,4]})
然后我想將 OrangeTier 乘以 Days 並用結果覆蓋 OrangTier 列。
咱們試試吧:
mapper = df2.query('Contract == "OrangeTier"').set_index(['Date'])['Price']
df1['OrangeTier'] = df1['Date'].map(mapper)
df1.assign(OrangeTier=df1['OrangeTier'] * df1['Days'])
輸出:
Date From To Distance Days OrangeTier
0 01/02/2020 RU JK 40000 8 80000
1 01/03/2020 RU JK 40000 8 120000
2 01/04/2020 RU JK 40000 8 160000
3 01/02/2020 USA JK 30000 6 60000
4 01/03/2020 USA JK 30000 6 90000
5 01/04/2020 USA JK 30000 6 120000
6 01/02/2020 ME JK 20000 4 40000
7 01/03/2020 ME JK 20000 4 60000
8 01/04/2020 ME JK 20000 4 80000
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.