【问题标题】:how to get only the second index of a data frame with a certain condition如何仅获取具有特定条件的数据帧的第二个索引
【发布时间】:2019-10-12 23:10:52
【问题描述】:

首先,我对 python 还很陌生,所以请放轻松。
我需要从数据框中获取某个值。

我得到了这个代码:
第一个输入的数据框:

符号 日期 bmo amc 公司名称
AAP 2019-05-22 在 Open Advance Auto 之前 ADI 2019-05-22 开盘前 ADI CM 2019-05-22 开盘前 CIBC CSWI 2019-05-22 开盘前 CSW Industrials KLXE 2019-05-22 开盘前 KLX Energy Services
for stock_symbol in mystocks:
    print(stock_symbol)

输入:

#get the date from the date column
ddate = df_earning_calander.loc[
    df_earning_calander.index == stock_symbol, 'date'][stock_symbol]
print(ddate)

输出:

AAP
2019-05-22 00:00:00


第二个输入的数据框:

符号 股票名称 日期 ... AAP Advance Auto Parts Inc 2018-11-13 ... AAP Advance Auto Parts Inc 2019-02-15 ... AAP Advance Auto Parts Inc 2019-02-19 ... AAP Advance Auto Parts Inc 2019-05-21 ... AAP Advance Auto Parts Inc 2019-05-22 ... 输入:
#get all the dates from the date column
ddate_12 = df_earnings_12.loc[
    df_earnings_12.index == stock_symbol, 'date'][stock_symbol]
print(ddate_12)

输出:

AAP   2018-11-13
AAP   2019-02-15
AAP   2019-02-19
AAP   2019-05-21
AAP   2019-05-22
Name: date, dtype: datetime64[ns]
if ddate in ddate_12:
    continue

好吧,我正在尝试检查第一个数据框中的日期是否在第二个数据框中并且(而股票名称相同)。
此代码不会转到下一个可迭代对象。我认为这是因为第二个输出给了我股票名称和日期,而不仅仅是日期。

【问题讨论】:

  • 嗨。请花时间阅读how to provide a great pandas example 上的这篇文章以及如何提供minimal, complete, and verifiable example 并相应地修改您的问题。 how to ask a good question 上的这些提示也可能有用。
  • 在markdown中如果你想跳过一行使用2个空格并输入而不是<br>
  • @jezrael 谢谢我添加了数据框,这样人们就可以看到这是关于什么的。
  • @Craicerjack 我试着做 2 个空格,但它不起作用......
  • 不,我需要检查第一个数据框中的日期是否存在于第二个数据框中(对于同一股票)。我认为问题出在第二次打印中,它同时打印了股票名称和日期。我希望它只打印我认为这是解决方案的日期我不知道该怎么做

标签: python pandas dataframe pandas-loc


【解决方案1】:

您可以只选择日期列,通过 Series.reset_index 创建 2 列 DataFrame,如果可能重复对添加 DataFrame.drop_duplicates

df1 = df_earning_calander['date'].reset_index().drop_duplicates()
print (df1)
  symbol        date
0    AAP  2019-05-22
1    ADI  2019-05-22
2     CM  2019-05-22
3   CSWI  2019-05-22
4   KLXE  2019-05-22

df2 = df_earnings_12['date'].reset_index().drop_duplicates()
print (df2)
  symbol        date
0    AAP  2018-11-13
1    AAP  2019-02-15
2    AAP  2019-02-19
3    AAP  2019-05-21
4    AAP  2019-05-22

然后对于具有相同列名的两个 DatFrame 之间的交集,使用带有默认内部连接的 DataFrame.merge - 获取与两者之间的所有日期时间匹配的所有符号:

df = df1.merge(df2)
print (df)
  symbol        date
0    AAP  2019-05-22

如果需要,最后的符号测试列表比较列 df['symbol'] 的布尔掩码,并通过 Series.any 测试是否至少有一个 True

mystocks = ['ADI','AAP']
for stock_symbol in mystocks:
    if ((df['symbol'] == stock_symbol).any()):
        print (f'Matched {stock_symbol}')
        #Matched AAP

【讨论】:

    猜你喜欢
    • 2022-01-26
    • 2022-07-21
    • 1970-01-01
    • 2021-09-29
    • 2023-02-08
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多