Python 使用一组字符串对熊猫系列重新编制索引将删除该系列中的原始数据

Python 使用一组字符串对熊猫系列重新编制索引将删除该系列中的原始数据,python,pandas,Python,Pandas,我有一个名为day_counts的系列,它通常包含7个值,但看起来像这样。0对应于星期一到星期天6 Name: dow, dtype: int64 0 332 1 722 2 721 但是,索引需要有7个值长(对于一周中的几天),因此我重新为序列编制索引,但使用字符串列表作为索引。代码如下所示(scrobbles是从csv文件读取的数据帧): 这将创建新索引,但任何现有数据都会被0覆盖,并输出以下内容: Mon 0 Tue 0 Wed 0 Thu 0

我有一个名为day_counts的系列,它通常包含7个值,但看起来像这样。0对应于星期一到星期天6

Name: dow, dtype: int64
0    332
1    722
2    721
但是,索引需要有7个值长(对于一周中的几天),因此我重新为序列编制索引,但使用字符串列表作为索引。代码如下所示(scrobbles是从csv文件读取的数据帧):

这将创建新索引,但任何现有数据都会被0覆盖,并输出以下内容:

Mon    0
Tue    0
Wed    0
Thu    0
Fri    0
Sat    0
Sun    0
Name: dow, dtype: int64
应该是这样的

Mon    332
Tue    722
Wed    721
Thu    0
Fri    0
Sat    0
Sun    0
有人知道我如何保存现有数据吗

有趣的是,如果我将索引设置为像这样的数字
new\u index=[0,1,2,3,4,5,6]

然后它会按预期工作

谢谢


只需确保初始数据帧的长度与新索引的长度相同即可。但正如你在帖子的开头所说;它通常包含7个值,因此无需担心。

我通过创建字典并将工作日列表压缩到初始系列,然后从字典创建数据帧来解决这个问题

hour_counts = _scrobbles['dow'].value_counts().sort_index() 
days = 'Mon Tue Wed Thu Fri Sat Sun'.split()
df = pd.DataFrame(list(dict(zip(days, hour_counts)).items()), columns=['Month', 'Count'])

我假设你有:

  • day\u计数
    ,例如
    pd.系列([33272721])
  • new_index=[周一、周二、周三、周四、周五、周六、周日]
要创建结果,请从包含7个零的序列开始:

dc = pd.Series(7 * [0])
然后用
天计数更新它

dc.update(day_counts)
结果是,您有一个包含7项的系列,初始项 从
天开始计算
,剩余项目=0

然后只需将
dc
中的索引替换为
new\u索引

dc.index = new_index
结果是:

Mon    332
Tue    722
Wed    721
Thu      0
Fri      0
Sat      0
Sun      0
Mon    1
Tue    0
Wed    0
Thu    0
Fri    0
Sat    2
Sun    1
编辑 请在下面找到整个问题的一个稍微改变的解决方案, 基于
groupby
,即使没有任何辅助表和更新:

import pandas as pd

# Source data
df = pd.DataFrame([ '2018-12-01', '2018-12-02', '2018-12-03', '2018-12-01' ],
    columns=['text_timestamp'])
# Change dates from string to datetime
df.text_timestamp = pd.to_datetime(df.text_timestamp)
# Add dow column
df['dow'] = df.text_timestamp.dt.dayofweek
# Compute day counts
day_counts = df.groupby('dow')['text_timestamp'].count()\
    .reindex(range(0, 7), fill_value=0)
# Change index
day_counts.index = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
对于上述数据,结果为:

Mon    332
Tue    722
Wed    721
Thu      0
Fri      0
Sat      0
Sun      0
Mon    1
Tue    0
Wed    0
Thu    0
Fri    0
Sat    2
Sun    1

在你的日子里,零代表“星期一”是什么?旧指数和新指数之间的对应关系是什么?请提供道琼斯指数是如何创建的。是的,很抱歉,0是周一到6日,即周日。例如,如果我重新编制指数,但只是使用一个数字列表,数据保持在正确的位置,即正确的工作日,所有其他设置为0,还包括道琼斯指数创建、更新的完整代码,我相信它与数字一起工作,因为熊猫知道新指数和旧指数之间的对应关系,使用周日名称与0、1、2没有对应关系…嗯,我想这是有道理的,是否仍有保持该对应关系的方法?例如,set_索引将起作用,除非在没有7个数据集的情况下。谢谢你,我已经测试过了,这也起作用,但是我将保留我在下面发布的方法,因为它现在按照我的意愿工作