使用 CrossTab Pandas 获得的索引 DataFrame [重复]

Posted

技术标签:

【中文标题】使用 CrossTab Pandas 获得的索引 DataFrame [重复]【英文标题】:Indexing DataFrame obteined with CrossTab Pandas [duplicate] 【发布时间】:2019-04-12 23:52:53 【问题描述】:

我有两个数据集。

第一个,在 ma​​rket 变量中包含具有以下结构的通用市场趋势:

Date     High    Close     Volume     Open      Low

第二个,在 moods 变量中包含每天几条在这种结构中带有关联情绪的推文:

body       date            datetime         id sentiment      time

所以,我想计算每天有多少“看跌”和“看涨”情绪。它有效,这是我的 cmets 代码:

# Read the datasets
market = pd.read_csv("Datasets/SP500/aggregates.txt")
moods = pd.read_json("Datasets/DatasetStockTwits-Aggregato.json")
# Remove all null sentiments
moods = moods[moods.sentiment != "null"]
# Get a generic subsets of data for computational speed
market_tail = market.tail(100)
# For each day present in market_tail, get the same days twits
moods_tail = moods.loc[moods['date'].isin(market_tail.Date)]
# So now I count for each day how many "Bearish" and "Bullish" twits there are
sentiments_count = pd.crosstab(moods_tail['date'], moods_tail['sentiment'])

print(sentiments_count)

这是结果:

sentiment   Bearish  Bullish
date                        
2017-11-03        9       12
2017-11-05        3        6
2017-11-06       20        9
2017-11-07       16       35

所以它工作正常,但我不明白为什么我无法访问 sentiments_count.datesentiments_count['date'] 索引。

事实上,如果我尝试这样的事情:

print(sentiments_count['date'])

我得到:KeyError: 'date'

我错过了什么吗? 谢谢

【问题讨论】:

【参考方案1】:

不能选择,因为是index,所以需要:

print(sentiments_count.index)

对于从index 创建列需要reset_index,也可以用于数据清理添加rename_axis 用于删除列名称sentiment

sentiments_count = sentiments_count.reset_index().rename_axis(None, 1)

print(sentiments_count['date'])

【讨论】:

它工作。谢谢老兄。 @bhaskarc - 是的,如果需要原始索引,但显然没有必要 - 需要将索引转换为列并创建默认索引。

以上是关于使用 CrossTab Pandas 获得的索引 DataFrame [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python使用pandas的crosstab函数计算混淆矩阵并使用Seaborn可视化混淆矩阵实战

如何在 pandas 的 crosstab/pivot_table 中使用两个不同的函数?

pandas pivot_table透视表crosstab交叉表aggfunc函数详解及实战

Pandas crosstab() 函数与包含 NaN 值的数据框的混淆行为

2018.03.29 python-pandas 数据透视pivot table / 交叉表crosstab

#值!数组索引和匹配错误