如何使用以下数据集创建多索引数据框?

时间:2019-04-19 07:58:35

标签: python dataframe multi-index

我必须创建一个包含两个不同数据帧中包含的数据的多索引数据帧。 对于第二数据帧(日期)的每个索引,对于第一数据帧的每一行,如果第一数据帧的“日期”列中的值等于第二数据帧的索引,则创建一个多索引数据帧每个日期,每天发布的推文数量和每一行的功能。

这是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

1 个答案:

答案 0 :(得分:0)

如果我的理解正确,那么如果库存数据集中有相同日期的条目,则希望按日期过滤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'])