【发布时间】:2019-02-05 20:07:31
【问题描述】:
我想遍历 Multiindex 并将“2017-01-01”月的第一天的“供应”列(前 10 个“符号”,已经排名)乘以“价格”(相同的 10 个符号)在每个月的每一天直到月底,并将值存储在新列“New.Cap”中,并为每个月重复相同的操作。
我尝试了一个 for 循环,但无法使其工作。我能够获得前 10 名的“供应”值并将其乘以第二天的价格(相同的“符号”)并将其存储为“2017-01-02”
我的数据框:
Date Symbol Market.Cap Price Circulating.Supply
1/1/2017 BTC 16050414526 998.33 16077337
1/1/2017 ETH 715049311 8.17 87493800
1/1/2017 XRP 231408729 0.01 36337298649
1/1/2017 LTC 221718486 4.51 49144154
1/1/2017 XMR 190983552 13.97 13668252
1/1/2017 ETC 122202804 1.4 87444118
1/1/2017 DASH 78524020 11.23 6992839
1/1/2017 REP 43994860 4 11000000
1/1/2017 MAID 43862003 0.1 452552412
1/1/2017 STEEM 36999610 0.16 229582096
1/1/2017 XEM 30962258 0 8999999999
1/1/2017 ICN 26381302 0.3 87000000
1/1/2017 FCT 25392986 2.9 8753219
1/1/2017 DOGE 24501946 0 1.07544E+11
1/1/2017 WAVES 22132166 0.22 100000000
1/1/2017 DGD 18079172 9.04 2000000
1/2/2017 BTC 16429072864 1021.75 16079300
1/2/2017 ETH 733331862 8.38 87525306
1/2/2017 XRP 229312859 0.01 36337298649
1/2/2017 LTC 228536428 4.65 49158829
1/2/2017 XMR 219509938 16.05 13675283
1/2/2017 ETC 125743676 1.44 87476792
1/2/2017 DASH 82595831 11.81 6994957
1/2/2017 REP 46101566 4.19 11000000
1/2/2017 MAID 42320210 0.09 452552412
1/2/2017 STEEM 35374447 0.15 229645428
1/2/2017 XEM 30396875 0 8999999999
1/2/2017 ICN 26451766 0.3 87000000
1/2/2017 FCT 26119449 2.98 8753219
1/2/2017 DOGE 24343443 0 1.07557E+11
1/2/2017 WAVES 23267904 0.23 100000000
1/2/2017 ZEC 17773124 49.79 356994
1/3/2017 BTC 16786354619 1043.84 16081362
1/3/2017 ETH 851511659 9.73 87556829
1/3/2017 XRP 232046528 0.01 36337298649
1/3/2017 LTC 227483720 4.63 49172954
1/3/2017 XMR 220176407 16.09 13681607
1/3/2017 ETC 130608332 1.49 87508802
1/3/2017 DASH 89434687 12.78 6997071
1/3/2017 REP 46955890 4.27 11000000
1/3/2017 MAID 44863660 0.1 452552412
1/3/2017 STEEM 36308540 0.16 229753160
1/3/2017 XEM 32157836 0 8999999999
1/3/2017 ICN 29520641 0.34 87000000
1/3/2017 FCT 27402737 3.13 8753219
1/3/2017 DOGE 24429805 0 1.07571E+11
1/3/2017 WAVES 23992972 0.24 100000000
索引列是前两个(日期和符号)。
这是我目前所拥有的:
df = pd.read_csv(file_path, parse_dates=['Date'], index_col='Date')
df = df.set_index('Symbol', append=True)
s = df['Circulating.Supply'].xs('2017-01-01') * df['Price'].xs('2017-01- 02')
s.index = [np.repeat(pd.Timestamp('2017-01-02'), len(s)), s.index]
df['New.Cap'] = s
print(df['New.Cap'].loc['2017-01-02'])
【问题讨论】:
-
运行
df['Circulating.Supply'].xs('2017-01-01') * df['Price'].xs('2017-01-02')给了我所有的 NaN,因为日期不同。 -
请打印它以供 print(df['New.Cap'].loc['2017-01-02']) 查看值。
-
df['New.Cap'] = s给出 ValueError 并失败,所以我不能 -
我假设
Date是开始的索引col? -
抱歉,我忘记指定索引了。 'Date' 和 'Symbol' 是索引,这就是你可能得到 ValueError 的原因。
标签: pandas multi-index