熊猫为每个 groupby 组选择第一个非 NaN 值之后的行

时间:2021-04-09 00:06:20

标签: python-3.x pandas pandas-groupby

我想在我的数据集中每个组 ["etf_ticker", "ticker"] 的第一个非 NaN 值之后选择行:

trade_date,etf_ticker,ticker,buy_sell,quantity,weighting,open,low,high,close,volume,spy_close,qqq_close,10YUSD_close
2021-02-05,ARKF,1833.HK,,,,112.5,102.5,112.5,104.900002,9714617.0,386.444305,330.942017,1.17
2021-02-09,ARKF,1833.HK,,,,103.900002,101.900002,105.900002,104.5,5574818.0,388.976013,333.089325,1.157
2021-02-10,ARKF,1833.HK,Buy,497800.0,0.1854,107.800003,104.0,108.0,105.699997,3336335.0,388.806549,332.330261,1.133
2021-02-11,ARKF,1833.HK,Buy,2098800.0,0.7583,127.0,127.0,127.0,127.0,0.0,389.434509,334.157928,1.158
2021-02-18,ARKF,1833.HK,,,,139.0,130.600006,140.600006,134.600006,9742566.0,389.444489,332.050629,1.287
2021-03-11,ARKF,1833.HK,Buy,965000.0,0.2978,95.949997,95.0,98.849998,98.400002,6335100.0,392.2453,317.638824,1.527
2021-03-29,ARKF,1833.HK,,,,94.099998,93.900002,100.599998,99.050003,5850980.0,394.730011,314.320007,1.726
2021-03-31,ARKF,1833.HK,,,,97.800003,97.599998,103.800003,103.300003,6723838.0,400.609985,324.570007,1.679
2021-03-26,ARKF,AAPL,,,,120.349998,118.919998,121.480003,121.209999,93958900.0,395.980011,316.0,1.66
2021-03-28,ARKF,AAPL,,,,121.650002,120.730003,122.580002,121.389999,80819200.0,395.779999,315.910004,1.721
2021-03-29,ARKF,AAPL,Sell,77439.0,0.245,120.110001,118.860001,120.400002,119.900002,85671900.0,394.730011,314.320007,1.726
2021-03-30,ARKF,AAPL,,,,121.650002,121.150002,123.519997,122.150002,118323800.0,396.329987,319.130005,1.746

预期结果是:

trade_date,etf_ticker,ticker,buy_sell,quantity,weighting,open,low,high,close,volume,spy_close,qqq_close,10YUSD_close
2021-02-10,ARKF,1833.HK,Buy,497800.0,0.1854,107.800003,104.0,108.0,105.699997,3336335.0,388.806549,332.330261,1.133
2021-02-11,ARKF,1833.HK,Buy,2098800.0,0.7583,127.0,127.0,127.0,127.0,0.0,389.434509,334.157928,1.158
2021-02-18,ARKF,1833.HK,,,,139.0,130.600006,140.600006,134.600006,9742566.0,389.444489,332.050629,1.287
2021-03-11,ARKF,1833.HK,Buy,965000.0,0.2978,95.949997,95.0,98.849998,98.400002,6335100.0,392.2453,317.638824,1.527
2021-03-29,ARKF,1833.HK,,,,94.099998,93.900002,100.599998,99.050003,5850980.0,394.730011,314.320007,1.726
2021-03-31,ARKF,1833.HK,,,,97.800003,97.599998,103.800003,103.300003,6723838.0,400.609985,324.570007,1.679
2021-03-29,ARKF,AAPL,Sell,77439.0,0.245,120.110001,118.860001,120.400002,119.900002,85671900.0,394.730011,314.320007,1.726
2021-03-30,ARKF,AAPL,,,,121.650002,121.150002,123.519997,122.150002,118323800.0,396.329987,319.130005,1.746

我已经检查了一些示例,但不确定如何将它们应用到 groupbylast_valid_index

我可以遍历每个组的数据集并创建一个新的数据框,但想知道是否有更好的方法。 发送

1 个答案:

答案 0 :(得分:1)

尝试使用 groupby + transformidxmax

out = df[df.index>=df['buy_sell'].notnull().groupby([df['etf_ticker'],df['ticker']]).transform('idxmax')]