Определение минимальной даты на основе столбца, равного указанному c значению в pandas кадре данных? - PullRequest
1 голос
/ 02 августа 2020

У меня есть фрейм данных, который выглядит примерно так:

       Date     Account             Symbol  Name                                     Transaction type
0   2020-06-24  Vanguard Brokerage  VSGAX   VANGUARD SMALL CAP GROWTH INDEX ADMIRAL CL   Dividend
1   2020-06-24  Vanguard Brokerage  VSGAX   VANGUARD SMALL CAP GROWTH INDEX ADMIRAL CL   Reinvestment
2   2020-06-24  Vanguard Brokerage  VTSAX   VANGUARD TOTAL STOCK MARKET INDEX ADMIRAL C  Dividend
3   2020-06-24  Vanguard Brokerage  VTSAX   VANGUARD TOTAL STOCK MARKET INDEX ADMIRAL    Reinvestment
4   2020-06-19  Vanguard Brokerage  VHYAX   VANGUARD HIGH DIVIDEND YIELD INDEX ADMIRAL   Dividend
5   2020-06-19  Vanguard Brokerage  VHYAX   VANGUARD HIGH DIVIDEND YIELD INDEX ADMIRAL   Reinvestment
7   2020-06-16  Vanguard Brokerage  VHYAX   VANGUARD HIGH DIVIDEND YIELD INDEX ADMIRAL   Buy
8   2020-06-16  Vanguard Brokerage  VSGAX   VANGUARD SMALL CAP GROWTH INDEX ADMIRAL CL   Buy
9   2020-06-16  Vanguard Brokerage  VTSAX   VANGUARD TOTAL STOCK MARKET INDEX ADMIRAL C  Buy

Я хотел бы извлечь самую раннюю дату для каждого символа, который имеет тип транзакции «покупка», и поместить эту информацию в словарь. Я не уверен, что лучше использовать .groupby, или более подходит for-l oop.

В настоящее время я пытаюсь использовать al oop для перебора всех столбцы, вытащите все транзакции, равные «Купить». После этого я пытался выяснить, как извлечь минимальную дату из этого нового набора данных и поместить ее в словарь. Вот что у меня сейчас есть.

excel_file_1 = 'Stock.Activity.xlsm'

#Putting excel files into dataframes
df_vang_brok = pd.read_excel(excel_file_1, sheet_name = 'Vanguard.Brokerage',
                             index=False)
df_vang_ira = pd.read_excel(excel_file_1, sheet_name = 'Vanguard.IRA',
                            index=False)
df_schwab_brok = pd.read_excel(excel_file_1, sheet_name = 'Schwab.Brokerage',
                               index=False)

#Combining data frames into one 
df_all = pd.concat([df_vang_brok, df_vang_ira, df_schwab_brok])

df_early={}
for index,row in df_all.iterrows():
    if row['Transaction type'] == 'Buy':
        print(row['Date'],row['Symbol'],row['Amount'])
        df_early = {'Date': row['Date'], 'Symbol': row['Symbol'],
                    'Amount': row['Amount']}
print(df_early)

Я получаю результат:

2017-07-17 00:00:00 VSGAX -678.93
2017-07-05 00:00:00 VTSAX -1915.76
2017-07-03 00:00:00 VTYAX -3022.93
{'Date': Timestamp('2017-07-03 00:00:00'), 'Symbol': 'VTYAX', 'Amount': -3022.93}

Он успешно извлекает все транзакции с «покупкой» из фрейма данных, но как мне вытащить самые ранние дату после этого и поместите его в мой df_early dataframe?

Это даже лучший / самый эффективный способ go об этом?

Спасибо!

1 Ответ

1 голос
/ 02 августа 2020

Что-то вроде этого?

df.loc[df['Transaction type'] == 'Buy'].groupby('symbol')['date'].min()

Первая часть (до .groupby ()) выбирает все строки, где «Тип транзакции» - «Купить», затем вы группируете этот фрейм данных по «символу», выбираете столбец 'date' и примените к нему функцию min (). Если вам нужны и все другие столбцы, вы можете поместить вышеуказанное в отдельный файл df.loc [].

Я все еще учусь, так что, возможно, я совершенно ошибаюсь, трудно попробовать эти вещи, но я буду поиграться немного :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...