如何基于推特与特斯拉股票数据创建MultiIndex DataFrame?
搞定基于股票日期匹配推特数据的MultiIndex DataFrame
我来帮你解决这个需求——以特斯拉股票的日期索引为基准,匹配对应日期的推特数据,生成带日期和推文编号的多级索引DataFrame。下面是具体的实现步骤和优化方案:
核心思路
我们需要先对齐两者的日期格式,筛选出股票日期范围内的推特数据,然后为每个日期下的推文分配序号,最后构建多级索引。
完整实现代码
import pandas as pd # 第一步:统一日期格式,确保两者日期类型一致 # 处理推特数据的Date列 sortedTweetsData['Date'] = pd.to_datetime(sortedTweetsData['Date']) # 处理股票数据的索引 TeslaData.index = pd.to_datetime(TeslaData.index) # 第二步:筛选出日期存在于股票索引中的推特记录 matched_tweets = sortedTweetsData[sortedTweetsData['Date'].isin(TeslaData.index)] # 第三步:为每个日期内的推文生成编号(从1开始) matched_tweets['Number of Tweets'] = matched_tweets.groupby('Date').cumcount() + 1 # 第四步:构建MultiIndex并整理列顺序 matched_tweets.set_index(['Date', 'Number of Tweets'], inplace=True) final_df = matched_tweets[['Full text', 'Retweets', 'Likes']]
对你现有尝试的优化说明
你原来的嵌套循环写法有几个问题:
- 效率极低:双重循环遍历数据,当数据量稍大时会非常卡顿,用pandas的内置方法(
isin、groupby)能大幅提升性能 - 索引构建逻辑错误:
from_product是生成笛卡尔积,不适合这种“每个日期对应自身推文编号”的场景,我们需要的是分组后为每组生成序号再设置索引 - 数据收集缺失:你只做了计数,没有把推文的具体内容(Full text、Retweets、Likes)整合到结果里
最终输出效果
运行上面的代码后,你会得到和期望一致的结果:
Full text Retweets Likes Date Number of Tweets 2018-04-13 1 RT @Tesla... 2838 0 2 @timkhiggins... 7722 40733 3 @TheEconomist.. 1911 18634
内容的提问来源于stack exchange,提问作者Rachele Povelato
相关产品推荐
相关产品推荐

