【问题标题】:How can I create a multiindex data frame with the following datasets?如何使用以下数据集创建多索引数据框?
【发布时间】:2019-04-19 07:58:35
【问题描述】:

我必须创建一个多索引数据框,以考虑包含在两个不同数据框中的数据。 对于第二个数据帧的每个索引(日期),对于第一个数据帧的每一行,如果第一个数据帧的日期列中的值等于第二个数据帧的索引,那么我创建一个多索引数据帧每个日期,每天发布的推文数量和每行的特征。

这是第一个包含来自 Twitter 的数据的数据框:

        Date            Full text   Retweets    Likes
333     2018-04-13  RT @Tesla...    2838             0
332     2018-04-13  @timkhiggins... 7722             40733
331     2018-04-13  @TheEconomist.. 1911             18634

这是特斯拉股票市场数据的第二个数据框:

                Open        High     Low         Close  Volume       Gap
Date                        
2018-04-13  283.000000  296.859985   279.519989  294.089996 8569400  11.089996
2018-04-14  303.320000  304.940002   291.619995  291.970001 7286800  -11.349999
2018-04-25  287.760010  288.000000   273.420013  275.010010 8945800  -12.750000

这是我尝试做的:

for i in TeslaData.index:
    for row in sortedTweetsData.iterrows():
        if row[1]==i:
            NumTweetsByDay+=1
            for num in NumTweetsByDay:
                idx=pd.MultiIndex.from_product([[i],[NumTweetsBy]])
                colum=col
                df= pd.DataFrame(row,idx,column)

我正在寻找的输出如下:

Date        Number of Tweets    Full text       Retweets    Likes

2018-04-13        1              RT @Tesla...    2838        0
                  2              @timkhiggins... 7722        40733
                  3              @TheEconomist.. 1911        18634

【问题讨论】:

    标签: python dataframe multi-index


    【解决方案1】:

    如果我理解正确,如果股票数据集中有同一日期的条目,您想按日期过滤 twitter 数据。

    你可以用 isin() 做到这一点:

    # convert datatypes first:
    sortedTweetsData['Date'] = pd.to_datetime(sortedTweetsData['Date'])
    TeslaData.index = pd.to_datetime(TeslaData.index)
    
    # do filtering
    df = sortedTweetsData[sortedTweetsData['Date'].isin(TeslaData.index.values)]
    

    接下来,您可以确定每个组有多少条推文:

    groupsizes = df.groupby(by='Date').size()
    

    并使用它来构建元组列表,定义您的多索引(可能有更优雅的方法来做到这一点):

    tups = [(ix, gs + 1) for ix in groupsizes.index.values for gs in range(groupsizes[ix])]
    

    终于:

    df.index = pd.MultiIndex.from_tuples(tups, names=['Date', 'Number of Tweets'])
    

    【讨论】:

    • Python 在这部分代码中给我一个“无效语法”的错误:tups = [(ix, gs + 1) for ix groupsizes.index.values for gs in range(groupsize[ix ])]。特别是在“groupsizes”中。
    • 最后一个问题!此刻我觉得有点傻。我到底怎么才能得到框架中的真实数据?
    • 我不明白。您想要答案中生成的 df 中的数据吗?
    • 我从代码中得到的是一个空的数据框。如何获取数据?
    • 好的,我认为这听起来像是数据类型冲突。 (twitter 数据框中的日期与股票数据框中的日期具有不同的数据类型,因此 isin() 在任何地方都评估为 False,留下一个空数据框)。查看编辑。
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 2021-10-09
    • 2017-11-05
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    相关资源
    最近更新 更多