как получить только второй индекс фрейма данных с определенным условием - PullRequest
1 голос
/ 27 мая 2019

Прежде всего, я довольно новичок в Python, поэтому, пожалуйста, будьте осторожны со мной.
Мне нужно получить определенное значение из фрейма данных.

Я получил этот код:
кадр данных для первого ввода:

symbol   date          bmo amc             company name<br>
AAP    2019-05-22  Before The Open         Advance Auto
ADI    2019-05-22  Before The Open       Analog Devices
CM     2019-05-22  Before The Open                 CIBC
CSWI   2019-05-22  Before The Open      CSW Industrials
KLXE   2019-05-22  Before The Open  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


кадр данных для второго входа:

symbol         Stock name         date               ...
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

хорошо, я пытаюсь проверить, находится ли дата из первого фрейма данных во втором фрейме данных и (при том же названии акции).
этот код не переходит к следующей итерации. Я думаю, это потому, что второй вывод дает мне название акции и дату, а не только дату.

1 Ответ

1 голос
/ 27 мая 2019

Вы можете выбрать только столбец даты, создать 2 столбца DataFrame с помощью Series.reset_index и, если возможно, дублирующихся пар добавьте 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

Тогда для пересечения обоих DatFrames с одинаковыми именами столбцов используйте DataFrame.merge с внутренним объединением по умолчанию - получить все символы, совпадающие со всеми датами и временем между ними:

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

Последнее, если необходимо проверить список символов, сравнить столбец df['symbol'] для логической маски и проверить, если хотя бы один True по Series.any:

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