如何在dataframe中查找值

2024-10-02 14:28:29 发布

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

我有一个这样的数据帧

Date        Ticker      Price
2019-03-21    AAPL        100
2019-03-21    GOOG        101
2019-03-21    IBM         102
2019-03-25    AAPL         90
2019-03-25    GOOG         91
2019-03-25    IBM          92
2019-03-27    AAPL        110
2019-03-27    GOOG        111
2019-03-27    IBM         112

我正在尝试添加一个名为“LastPrice”的列,该列查找股票代码的最后日期价格。日期不是连续的。谢谢

Date        Ticker      Price      LastPrice
2019-03-21    AAPL        100
2019-03-21    GOOG        101
2019-03-21    IBM         102
2019-03-25    AAPL         90            100
2019-03-25    GOOG         91            101
2019-03-25    IBM          92            102
2019-03-27    AAPL        110             90
2019-03-27    GOOG        111             91
2019-03-27    IBM         112             92

Tags: 数据date价格ibmprice股票代码googticker
2条回答

假设您的数据是按日期排序的,您可以使用groupby和shift

df['LastPrice'] = (
    df.groupby('Ticker')
    .apply(lambda x: x.Price.shift())
    .reset_index(0, drop=True)
)

    Date        Ticker  Price   LastPrice
0   2019-03-21  AAPL    100     NaN
1   2019-03-21  GOOG    101     NaN
2   2019-03-21  IBM     102     NaN
3   2019-03-25  AAPL    90      100.0
4   2019-03-25  GOOG    91      101.0
5   2019-03-25  IBM     92      102.0
6   2019-03-27  AAPL    110     90.0
7   2019-03-27  GOOG    111     91.0
8   2019-03-27  IBM     112     92.0

您可以使用许多方法查找值,下面是一种更简单的方法

  1. 查一下AAPL的价格df["Ticker"]=="AAPL"将返回一个真/假值数组。当df["Ticker"]包含"AAPL"时为Truedf.loc将位于数据帧中,其中df["Ticker"]=="AAPL"数组中的真值与数据帧中的行相对应。这就是为什么您只看到df["Ticker"]=="AAPL"所在的行
df # your df

df_AAPL = df.loc[df["Ticker"]=="AAPL"]
  1. 要获取价格,可以使用df.loc定位价格列
df_AAPL_price = df_AAPL.loc[:,"Price"]
  1. 要在某个日期(假设您的日期在str中)获取“Ticker”==“AAPL”时的价格,您可以使用lambda函数并将其应用于数据帧中的列,因此axis = 1。此函数接受行中的值并返回Trueifrow["Date"] == "2019-03-27" and row["Ticker"] == "AAPL"elseFalse。与第1点中的概念相同,df.loc用于定位True出现在数组中的数据帧中的位置。您可以将其视为dataframe=[1,2,3],array=[True,False,True],并将它们匹配起来,然后仅在数组中为True时才获取该值。因此,在这种情况下,只有“1”和“3”
df_new = df.loc[df.apply(lambda row:True if row["Date"] == "2019-03-27" and row["Ticker"] == "AAPL" else False ,axis=1)]

相关问题 更多 >