如何仅获取具有特定条件的数据框的第二个索引
how to get only the second index of a data frame with a certain condition
首先,我是 python 的新手,所以请放轻松。
我需要从数据框中获取特定值。
我得到了这个代码:
第一个输入的数据框:
symbol date bmo amc company name
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
好吧,我正在尝试检查第一个数据框中的日期是否在第二个数据框中并且(当股票名称相同时)。
此代码不会转到下一个可迭代对象。我认为这是因为第二个输出给了我股票名称和日期,而不仅仅是日期。
您可以 select 只有日期列,通过 Series.reset_index
and if possible duplicated pairs add DataFrame.drop_duplicates
创建 2 个列 DataFrame
:
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
Last if need test list of symbols compare column df['symbol']
for boolean mask 并通过 Series.any
:
测试是否至少有一个 True
mystocks = ['ADI','AAP']
for stock_symbol in mystocks:
if ((df['symbol'] == stock_symbol).any()):
print (f'Matched {stock_symbol}')
#Matched AAP
首先,我是 python 的新手,所以请放轻松。
我需要从数据框中获取特定值。
我得到了这个代码:
第一个输入的数据框:
symbol date bmo amc company name
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
好吧,我正在尝试检查第一个数据框中的日期是否在第二个数据框中并且(当股票名称相同时)。
此代码不会转到下一个可迭代对象。我认为这是因为第二个输出给了我股票名称和日期,而不仅仅是日期。
您可以 select 只有日期列,通过 Series.reset_index
and if possible duplicated pairs add DataFrame.drop_duplicates
创建 2 个列 DataFrame
:
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
Last if need test list of symbols compare column df['symbol']
for boolean mask 并通过 Series.any
:
True
mystocks = ['ADI','AAP']
for stock_symbol in mystocks:
if ((df['symbol'] == stock_symbol).any()):
print (f'Matched {stock_symbol}')
#Matched AAP