簡體   English   中英

Python:在 Pandas 中,根據條件從數據幀中的幾列中提取數據,並添加到列上的不同數據幀匹配中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM