【问题标题】:Convert two columns of a dataframe into a Multi-Index将数据框的两列转换为多索引
【发布时间】:2022-01-24 08:28:52
【问题描述】:

我有以下数据框:

          id    symbol          kline_start_time                 kline_close_time   open_price    high_price     low_price   close_price         base_volume  taker_by_base_asset_volume  taker_by_quote_asset_volume
0         236    BELBTC 2021-12-12 17:00:00+00:00 2021-12-12 17:59:59.999000+00:00    0.0000327    0.00003293    0.00003261    0.00003266  4.219400000000e+03          1.242200000000e+03           4.077191000000e-02
1         291   BONDBTC 2021-12-12 17:00:00+00:00 2021-12-12 17:59:59.999000+00:00    0.0003512    0.00035590    0.00035080    0.00035590  9.439700000000e+02          3.874500000000e+02           1.371697600000e-01
2         491  DEGOUSDT 2021-12-12 17:00:00+00:00 2021-12-12 17:59:59.999000+00:00    6.2600000    6.38000000    6.25000000    6.38000000  2.304267000000e+04          1.287461000000e+04           8.146284280000e+04
3         495  DENTUSDT 2021-12-12 17:00:00+00:00 2021-12-12 17:59:59.999000+00:00    0.0036200    0.00368500    0.00361300    0.00367000  3.868363360000e+08          2.088560540000e+08           7.630782654240e+05
4         522  DOCKUSDT 2021-12-12 17:00:00+00:00 2021-12-12 17:59:59.999000+00:00    0.0706000    0.07286000    0.07029000    0.07158000  3.661556000000e+06          1.757480000000e+06           1.259960511000e+05
...       ...       ...                       ...                              ...          ...           ...           ...           ...                 ...                         ...                          ...
163593  52691  MOVRUSDT 2021-12-23 08:00:00+00:00 2021-12-23 08:59:59.999000+00:00  180.9000000  190.00000000  180.00000000  184.20000000  3.029349000000e+03          1.926400000000e+03           3.592661830000e+05
163594    293  BONDUSDT 2021-12-23 08:00:00+00:00 2021-12-23 08:59:59.999000+00:00   15.9000000   16.95000000   15.85000000   16.45000000  5.232289000000e+04          3.188566000000e+04           5.267414258000e+05
163595   1620   WINUSDT 2021-12-23 08:00:00+00:00 2021-12-23 08:59:59.999000+00:00    0.0004668    0.00047090    0.00046640    0.00047080  3.791888251000e+09          1.836740019000e+09           8.610554246663e+05
163596    734    GASBTC 2021-12-23 08:00:00+00:00 2021-12-23 08:59:59.999000+00:00    0.0001295    0.00012990    0.00012550    0.00012570  1.859040000000e+04          8.756600000000e+03           1.120307510000e+00
163597    553   DOTUSDT 2021-12-23 08:00:00+00:00 2021-12-23 08:59:59.999000+00:00   27.1500000   27.46000000   27.12000000   27.42000000  3.193410800000e+05          1.466104100000e+05           4.004982870500e+06

它目前具有您可以在左侧看到的顺序索引。 是否可以将其转换为多索引数据框,垂直索引是 kline_start_time 的唯一值,而水平索引是 symbol 的唯一值?请注意,kline_start_time 有 256 个唯一值,symbol 有 620 个唯一值。

【问题讨论】:

  • 我应该提到我正在努力解决的问题是自动将数据放入新的 df。到目前为止,我所拥有的是,考虑到初始数据帧 = df1 unique_starts= df1.kline_start_time.unique() unique_assets= df1.symbol.unique() arrays = [unique_starts,unique_assets] index = pd.MultiIndex.from_product(arrays, names=["time", "asset"]) resulting_df = pd.DataFrame(index=index, columns = assets_1h_df.columns),它按照我想要的方式组织,但为空。那么有没有办法用 df1 中的正确数据自动填充 results_df ?
  • 您的期望并不清楚。你能用你的结果样本更新你的帖子吗?
  • 恐怕你想要的不是所谓的多索引数据框...

标签: python pandas dataframe datetime multi-index


【解决方案1】:

你在找pivot吗?

value_cols = ['open_price', 'high_price', 'low_price', 'close_price', 'base_volume']
pivoted_df = df.pivot('kline_start_time', 'symbol', value_cols)

也许你只是想要:

new_df = df.set_index(['kline_start_time', 'symbol'])

更新

如果我希望它反过来旋转?这意味着我不想列出每个 value_cols 的所有符号,而是希望它列出每个符号的每个 value_cols ?

pivoted_df = pivoted_df.swaplevel(axis=1).sort_index(axis=1)

显然你可以链接df.pivot(...).swaplevel(...).sort_index(...)

【讨论】:

  • 它能解决你的问题吗?
  • 嘿@Co​​rralien - 非常感谢你的回答!是的,它似乎确实有效,这是您的第一个建议。我正在测试它。您的第二个建议也非常好,问题出在我的原始数据框中,“kline_start_time”和“symbol”列都没有唯一值。也就是说,每个 kline_start_time 都会出现多个符号,每个唯一的 start_time 都会出现一个符号。这会产生 620 个左右的符号,每个符号出现 256 次
  • 当然。仍在运行一些测试,应该不会花费太长时间。
  • 嘿,只是一个简单的问题。如果我希望它反过来旋转?这意味着我不想列出每个 value_cols 的所有符号,而是希望它列出每个符号的每个 value_cols ?
  • 更新效果很好,谢谢 :) 你能推荐一个很好的资源来使用滑动窗口来逐列计算整个 df 上的滚动指标吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 2019-04-14
  • 2022-01-25
  • 2020-07-11
  • 1970-01-01
  • 2023-04-03
相关资源
最近更新 更多