如果一个列满足不同行中不同列的多个条件,如何从中选择输入?

2024-05-23 15:07:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试选择与其他列的条件相匹配的某些输入,并使用该值创建一个新列。你知道吗

我试过.merge.locifelse,但还是有点不对劲。你知道吗

我有一个数据框架,以股票代码作为索引,下面的列用于多个股票和期权数据['date', 'price', 'exdate', 'position']

如果满足“位置”列中包含“1”的条件,我希望查看表并获取“日期”上等于“exdate”的“价格”,并将其显示在右侧的新列中。价格应与1相同。简短示例:

import numpy as np                                  
import pandas as pd 

t = pd.DataFrame(index=['AAPL','AAPL','AAPL','AAPL', 'AMZN', 'AMZN', 'AMZN', 'AMZN'])
t['Date']     = ['12/01/2017','12/02/2017','12/03/2017','12/04/2017','12/01/2017','12/02/2017','12/03/2017','12/04/2017']
t['Price']    = [125.5, 123.1, 126.4, 128.9, 431.2, 433.5, 432.6, 444.0]
t['Exdate']   = ['12/04/2017','12/04/2017','12/04/2017','12/04/2017','12/04/2017','12/04/2017','12/04/2017','12/04/2017']
t['Position'] = [1,0,0,0,0,0,1,0]
t

Tags: 数据import框架as价格merge条件pd
1条回答
网友
1楼 · 发布于 2024-05-23 15:07:16

据我所知,您希望在两个条件下合并,一个是索引匹配,另一个是日期vs exdate匹配。它类似于this question,但在那时(0.19)Pandas不支持混合索引/列条件。现在(0.24)是这样,但是索引应该有一个名称。下面是一个例子:

t.index.name = 'name'
t.loc[t['Position'].astype(bool)].merge(
    t[['Date', 'Price']], left_on=['name', 'Exdate'], right_on=['name', 'Date'])

输出

          Date_x  Price_x      Exdate  Position      Date_y  Price_y
name                                                                
AAPL  12/01/2017    125.5  12/04/2017         1  12/04/2017    128.9
AMZN  12/03/2017    432.6  12/04/2017         1  12/04/2017    444.0

从这个问题来看,我不确定应该如何处理位置为0的记录,但我希望你也能用同样的方法来解决。你知道吗

相关问题 更多 >