簡體   English   中英

根據等於 pandas dataframe 中的特定值的列定位最小日期?

[英]Locating minimum date based on column equal to specific value in pandas dataframe?

我有一個看起來像這樣的 dataframe:

       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 循環是否更合適。

我目前一直在嘗試使用循環來遍歷所有列,取出所有等於“購買”的交易。 在那之后,我一直試圖弄清楚如何從新數據集中提取最小日期並將其放入字典中。 這是我目前擁有的。

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)

我得到 output:

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}

它成功地從 dataframe 中提取了所有帶有“購買”的交易,但是我如何在此之后提取最早的日期並將其放入我的 df_early dataframe 中?

這甚至是 go 的最佳/最有效方法嗎?

謝謝!

像這樣的東西?

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

第一部分(tofer.groupby())選擇“交易類型”為“買入”的所有行,然后您將Z6A8064B5DF479455555555555555555557DZ組成“符號”,Z99938282582F04040404071859941E8F18F18F116列表和Min.16 colly.16 colly.16 colly and sigrt。 如果您還想要所有其他列,則可以將上述內容放在單獨的 df.loc[] 中。

我還在學習,所以也許我錯了,很難嘗試這些東西,但我會玩一下:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM