当前位置: 首页 > 知识库问答 >
问题:

Python:用多个索引重塑dataframe

段干飞翮
2023-03-14

假设我们有这样一个数据frame:

In[1]: operinc_df
Out[1] :

        ticker1     ticker2      ticker3
    0   0.343573    0.654719    0.246643
    1   0.186861    0.219793    0.761056
    2   0.417347    0.058368    0.684918
    3   0.803177    0.014781    0.896704
    4   0.294515    0.488001    0.291187
    5   0.402278    0.368005    0.821096
    6   0.985514    0.378000    0.929529
    7   1.168360    0.729640    0.347064
    8   0.025802    1.337121    0.638399
    9   0.019182    2.257563    0.041164

我们还有另一个具有相同行数和列数(具有相同名称)的DataFrame:

In[2]: opex_df
Out[2] :


     ticker1    ticker2      ticker3
0   1.450770    0.227986    2.243050
1   1.212298    0.406004    1.212320
2   0.918931    0.677043    0.361878
3   0.566981    1.155675    0.295542
4   0.600614    0.872015    1.129760
5   0.470118    0.730027    1.112045
6   1.489904    0.522885    0.475244
7   1.626853    0.142996    0.758590
8   0.290340    1.175891    0.591020
9   1.472838    0.107094    0.715764

我不知道如何创建另一个由operinc_dfopex_df组成的DataFrame基本原理,使其看起来像下面的DataFrame(可能有两个索引级别):

In[3]: fundamentals
Out[3] :




              operinc_df    opex_df 
ticker1   0    0.343573    1.450770
ticker1   1    0.186861    1.212298
.         .    .           .
.         .    .           .
.         .    .           .
ticker1   9    0.019182    1.472838
ticker2   0    0.654719    0.227986
ticker2   1    0.219793    0.406004
.         .    .           .
.         .    .           .
.         .    .           .
ticker2   9    2.257563    0.107094
ticker3   0    0.246643    2.243050
ticker3   1    0.761056    1.212320
.         .    .           .
.         .    .           .
.         .    .           .
ticker3   9    0.041164    0.715764

阅读基于列标签在pandas中重新塑造dataframes并从多个dict创建一个pandas DataFrame,这给了我一些见解(因为我也试图通过以下方法来实现:首先将原始dataframes转换为dicts,用字典理解的键打包operinc_dfopex_df,然后用pandas.DataFrame.from_dict()尝试创建guritials_df

你对我如何正确地做到这一点有什么想法吗?提前非常感谢。

共有1个答案

乔俊才
2023-03-14

您可以连接转置的数据帧,

new_df = pd.concat([operinc_df.T, opex_df.T], axis = 1, keys=['operinc_df', 'opex_df']).stack()


            operinc_df  opex_df
ticker1 0   0.343573    1.450770
        1   0.186861    1.212298
        2   0.417347    0.918931
        3   0.803177    0.566981
        4   0.294515    0.600614
        5   0.402278    0.470118
        6   0.985514    1.489904
        7   1.168360    1.626853
        8   0.025802    0.290340
        9   0.019182    1.472838
ticker2 0   0.654719    0.227986
        1   0.219793    0.406004
        2   0.058368    0.677043
        3   0.014781    1.155675
        4   0.488001    0.872015
        5   0.368005    0.730027
        6   0.378000    0.522885
        7   0.729640    0.142996
        8   1.337121    1.175891
        9   2.257563    0.107094
ticker3 0   0.246643    2.243050
        1   0.761056    1.212320
        2   0.684918    0.361878
        3   0.896704    0.295542
        4   0.291187    1.129760
        5   0.821096    1.112045
        6   0.929529    0.475244
        7   0.347064    0.758590
        8   0.638399    0.591020
        9   0.041164    0.715764
 类似资料:
  • 问题内容: 从这里开始。该解决方案仅适用于一列。如何改进多列解决方案。即如果我有一个像 如何重塑像 如果df是 然后 问题答案: 采用 要么, 另外,索引不相等

  • 我正在使用来训练CNN,基本错误是维度不匹配。 调试后的原因是: 生成输出: 如果需要,我的模型的摘要是: convolution2d_1(卷积2D)(无,32, 25, 34) 320convolution2d_input_1[0][0] activation\u 1(activation)(无、32、25、34)0卷积2d\u 1[0][0] 卷积2d\u 2(卷积2d)(无,32,23,32

  • 问题内容: 我在同一台Ubuntu服务器上有一个Rails 3应用程序的暂存和生产实例(使用tyre gem)。看来这两个实例都共享相同的elasticsearch索引,这显然不是我想要的。 如何使生产和登台实例使用单独的实例? 问题答案: 您需要覆盖索引名称。假设您要绑定ActiveRecord,它将根据相关模型创建索引名称。您可以使用这样的前缀来调整名称; 然后会创建一个名为的索引,以此类推。

  • 如果我定义一个像这样的分层索引数据框: 内容如下所示: 我知道如何提取与给定列对应的数据。例如。对于列: 如何提取符合以下标准集的数据: , , , column , , 列 和 、、列、以及从开始的所有列 是偶数 (顺便说一句,我做了不止一次rtfm,但我真的觉得难以理解。)

  • 我试图比较两个数据帧的差异,使用一个公共键/索引值,该值由帧中的3列组成。 e、 g.假设两列中的列都是:“COL1”、“COL2”、“COL3”、“COL4” 数据帧是df1 然后,我使用了set_index方法: 然后我想遍历df1数据帧,并检查df2数据帧是否有匹配的索引。我尝试过使用以下方法: 但是它返回false(尽管我可以通过打印看到两者的索引都存在)。 我做错了什么? 另外,如何使用

  • 问题内容: 我正在尝试仅使用来自多索引DataFrame的一个索引来创建新的DataFrame。 理想情况下,我想要这样的事情: 和: 本质上,我想删除除level之外的多索引的所有其他索引。是否有捷径可寻? 问题答案: 一种方法是简单地重新绑定到所需的MultiIndex级别。您可以通过指定要保留的标签名称来做到这一点: 或使用级别的整数值: MultiIndex的所有其他级别将在此处消失。