我必须创建一个包含两个不同数据帧中包含的数据的多索引数据帧。 对于第二数据帧(日期)的每个索引,对于第一数据帧的每一行,如果第一数据帧的“日期”列中的值等于第二数据帧的索引,则创建一个多索引数据帧每个日期,每天发布的推文数量和每一行的功能。
这是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
答案 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'])